【发布时间】:2017-02-21 17:05:40
【问题描述】:
我有以下功能
REAL FUNCTION myfunction(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
myfunction = SIN(x)
END FUNCTION myfunction
在一个名为myfunction.f90的文件中
我想在其他 f90 文件中使用此功能。我该怎么做?
【问题讨论】:
标签: fortran
我有以下功能
REAL FUNCTION myfunction(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
myfunction = SIN(x)
END FUNCTION myfunction
在一个名为myfunction.f90的文件中
我想在其他 f90 文件中使用此功能。我该怎么做?
【问题讨论】:
标签: fortran
在现代 Fortran 中推荐的方法是创建一个模块,我们称之为例如“神话”。在这种情况下,您可以创建一个文件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 的参数是否具有正确的数量、类型和维度——这可能会使将来的调试变得复杂。
【讨论】:
external。
只需使用外部...
...
REAL, EXTERNAL :: myfunction
REAL :: X, Y
...
Y = myfunction(x)
也就是说,让编译器做它所做的事情并捕捉容易遗漏的明显问题是更明智的......所以 jabirali 有一个很好的方法。
【讨论】: