我有以下功能
REAL FUNCTION myfunction(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
myfunction = SIN(x)
END FUNCTION myfunction
Run Code Online (Sandbox Code Playgroud)
在一个名为 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
Run Code Online (Sandbox Code Playgroud)
然后是另一个这样的文件main.f90:
program main
use :: mymath
print *,myfunction(3.1416/2)
end program
Run Code Online (Sandbox Code Playgroud)
然后你只需将源文件编译在一起:
gfortran mymath.f90 main.f90
Run Code Online (Sandbox Code Playgroud)
生成的可执行文件应按预期工作。
编辑:
如果你真的更喜欢远离模块,那么你可以mymath.f这样:
function myfunction(x) result(r)
real, intent(in) :: x
real :: r
r = sin(x)
end function
Run Code Online (Sandbox Code Playgroud)
并main.f90像这样:
program main
real, external :: myfunction
print *,myfunction(3.1416/2)
end program
Run Code Online (Sandbox Code Playgroud)
它像其他解决方案一样编译和工作。请注意,如果您选择使用external而不是module,编译器通常不会检查您提供的参数是否myfunction具有正确的数字、类型和维度——这可能会使将来的调试复杂化。