FORWARD_FUNCTION 을 이용한 함수 선언

게시판 IDL Q&A FORWARD_FUNCTION 을 이용한 함수 선언

2 답변 글타래를 보이고 있습니다
  • 글쓴이
    • #2905 Reply
      ChoiYoun
      회원

      안녕하세요.

      코드의 가독성을 위해 FORWARD_FUNCTION을 이용하여 함수(function)를 프로시저 파일 아래에 작성하려고 하였으나 오류가 발생하여 글 올립니다.

      “main.pro”와 “procedure1.pro” 두개의 파일로 이루어져있습니다. 각 파일의 내용을 간략하게 작성하면 아래와 같습니다.

      <main.pro>——————————–
      PRO main

      procedure1

      END
      ——————————————

      <procedure1.pro>————————–
      FORWARD_FUNCTION MYFUNCT

      PRO procedure1

      END

      FUNCTION MYFUNCT

      END
      ——————————————

      이때 main을 입력하여 코드를 실행할 경우 다음과 같은 에러 메세지가 출력됩니다.

      % Attempt to call undefined procedure/function: ‘MYFUNCT’.

      FORWARD_FUNCTION 없이 MYFUNCT을 procedure.pro 파일 가장 위에 선언할 경우 코드는 문제없이 작동하는데, FORWARD_FUNCTION을 사용할 경우에만 위와 같은 문제가 발생합니다. 왜 발생하는 문제인지 알수가 없네요.

    • #2906 Reply
      ChoiYoun
      회원

      예시를 수정합니다.

      <main.pro>——————————–
      PRO main

      procedure1

      END
      ——————————————

      <procedure1.pro>————————–
      FORWARD_FUNCTION MYFUNCT

      PRO procedure1


      result = MYFUNCT(…)

      END

      FUNCTION MYFUNCT

      END
      ——————————————

    • #2907 Reply
      Sangwoo
      회원

      우선 procedure1.pro에서 FORWARD_FUNCTION 구문은 안쪽에 적어야 합니다. 즉 PRO procedure1과 END 사이에 있어야 유효합니다. 지금처럼 바깥쪽에 적혀진 상태로는 없는 것이나 마찬가지입니다. 그리고 언급하신 문제는 FORWARD_FUNCTION과는 전혀 상관이 없는 문제이고, procedure1 프로그램 안에서 주프로그램인 procedure1과 부프로그램인 myfunct의 위치의 문제인데요. IDL에서 하나의 파일 안에서 주프로그램과 부프로그램이 공존할 경우, 주프로그램을 반드시 맨 뒤에 배치하는 것이 바람직합니다. 즉 procedure1.pro의 내용을 다음과 같이 구성하면 아무 문제가 생기지 않게 됩니다.

      FUNCTION MYFUNCT

      END

      PRO procedure1

      FORWARD_FUNCTION MYFUNCT

      result = MYFUNCT(…)

      END

      그 이유는 main을 실행할 경우 main.pro 파일이 외부의 다른 .pro 파일을 알아서 연계하여 컴파일을 하게 되는데, 앞부분에 부프로그램인 myfunct가 있어야 순서상 그것을 컴파일하고 그 뒤에 있는 procedure1에서 이 myfunct를 바로 인식할 수 있기 때문입니다. 만약 처음에 올려주셨던 것처럼 procedure1이 앞에 있고 myfunct가 뒤에 있을 경우에는 뒤쪽에 밀려나 있는 myfunct를 procedure1이 바로 자동으로 인식하지는 못하게 됩니다. 물론 후자의 경우라 하더라도 procedure1.pro를 사용자가 먼저 직접 컴파일을 해준다면 main은 문제없이 실행됩니다. 하지만 “사용자가 먼저 찾아서 일일이” 컴파일해줘야 하는 수고를 덜기 위해서는 어떤 프로그램든 항상 부프로그램들을 앞쪽에 그리고 맨뒤에 주프로그램이 위치하도록 하는 것이 정석입니다.

2 답변 글타래를 보이고 있습니다
'FORWARD_FUNCTION 을 이용한 함수 선언'에 답변달기
글쓴이 정보: