2017-02-19 1 views
0

는 내가 다른 F90 파일에이 기능을 사용하려면 myfunction.f90외부 함수를 호출하는 방법?

라는 파일에 다음과 같은 기능

REAL FUNCTION myfunction(x) 

    IMPLICIT NONE 
    REAL, INTENT(IN) :: x 
    myfunction = SIN(x) 

END FUNCTION myfunction 

있습니다. 어떻게해야합니까?

답변

1

현대 Fortran에서 이것을 수행하는 권장 방법은 모듈을 작성하는 것입니다. "mymath".

module mymath 
contains 
    function myfunction(x) result(r) 
    real, intent(in) :: x 
    real    :: r 

    r = sin(x) 
    end function 
end module 

그런 다음 다른 파일 main.f90이 같은 :이 경우, 당신은 하나 개의 파일 같은 것을 포함 mymath.f90 만들 수 있습니다

program main 
    use :: mymath 

    print *,myfunction(3.1416/2) 
end program 

그런 다음 당신은 단지 소스를 컴파일하는 파일을 함께 :

gfortran mymath.f90 main.f90 

결과 실행 파일이 예상대로 작동해야합니다.

편집 : 당신이 정말로 멀리 모듈에서 머물 것을 선호하는 경우

, 다음과 같은 mymath.f 할 수 있습니다 :

function myfunction(x) result(r) 
    real, intent(in) :: x 
    real    :: r 

    r = sin(x) 
end function 

을 그리고이 같은 main.f90합니다

program main 
    real, external :: myfunction 

    print *,myfunction(3.1416/2) 
end program 

을 다른 솔루션과 마찬가지로 컴파일되고 작동합니다. module 대신 external을 사용하는 경우 컴파일러는 보통 myfunction에 지정한 인수가 올바른 숫자, 유형 및 차원을 갖고 있는지 확인하지 않습니다. 이는 향후 디버깅을 복잡하게 만듭니다.

+0

감사합니다. 누군가 모듈 환경없이 함수를 호출하는 간단한 방법을 지적하면 기다릴 것입니다. –

+2

아마도 좋은 연습이지만 '외부'는 여기에 필요하지 않습니다. – francescalus

1

그냥 외부 사용은 ...

... 
REAL, EXTERNAL :: myfunction 
REAL   :: X, Y 
... 

Y = myfunction(x) 

컴파일러가 수행하고 놓치기 쉬운 명백한 문제를 잡는 일을 할 수 있도록 현명 말했다 그건 ... 그래서 jabirali 좋은 방법이있다 .

관련 문제