我有以下功能如何调用外部函数?
REAL FUNCTION myfunction(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
myfunction = SIN(x)
END FUNCTION myfunction
在一个名为myfunction.f90
我想使用其他F90文件这一功能的文件。我怎样才能做到这一点?
我有以下功能如何调用外部函数?
REAL FUNCTION myfunction(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
myfunction = SIN(x)
END FUNCTION myfunction
在一个名为myfunction.f90
我想使用其他F90文件这一功能的文件。我怎样才能做到这一点?
在现代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
的参数是否具有正确的编号,类型和尺寸 - 这可能会使调试在未来变得复杂。
只需使用外部...
...
REAL, EXTERNAL :: myfunction
REAL :: X, Y
...
Y = myfunction(x)
这就是说,它是明智的让编译器做它,抓住那些容易错过明显的问题......所以jabirali有一个好方法。
谢谢,如果有人指出在没有模块环境的情况下直接调用该函数,我会等待。 –
虽然也许是好的做法,但这里不需要'external'。 – francescalus