2017-02-19 45 views
0

我有以下功能如何调用外部函数?

REAL FUNCTION myfunction(x) 

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

END FUNCTION myfunction 

在一个名为myfunction.f90

我想使用其他F90文件这一功能的文件。我怎样才能做到这一点?

回答

1

在现代Fortran中推荐这样做的方法是创建一个模块,我们称它为例如“MYMATH”。在这种情况下,你可以创建一个文件,其中包含这样的mymath.f90

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

    r = sin(x) 
    end function 
end module 

然后另一个文件main.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 

它像其他解决方案一样编译和工作。请注意,如果您选择使用external而不是module,编译器通常不会检查您给myfunction的参数是否具有正确的编号,类型和尺寸 - 这可能会使调试在未来变得复杂。

+0

谢谢,如果有人指出在没有模块环境的情况下直接调用该函数,我会等待。 –

+2

虽然也许是好的做法,但这里不需要'external'。 – francescalus

1

只需使用外部...

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

Y = myfunction(x) 

这就是说,它是明智的让编译器做它,抓住那些容易错过明显的问题......所以jabirali有一个好方法。