我有以下功能
REAL FUNCTION myfunction(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
myfunction = SIN(x)
END FUNCTION myfunction
在名为myfunction.f90
我想在其他f90文件中使用此功能。我怎么能这样做?
答案 0 :(得分:2)
在现代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
提供的参数是否具有正确的数字,类型和维度 - 这可能会使问题复杂化将来调试。
答案 1 :(得分:1)
只需使用外部......
...
REAL, EXTERNAL :: myfunction
REAL :: X, Y
...
Y = myfunction(x)
那就是说,让编译器做它做的事情并抓住容易错过的明显问题更明智......所以jabirali有一个很好的方法。