如何调用外部函数?

Vla*_*gas 1 fortran

我有以下功能

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 文件中使用此功能。我怎样才能做到这一点?

jab*_*ali 6

在现代 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具有正确的数字、类型和维度——这可能会使将来的调试复杂化。

  • 尽管可能是一种很好的做法,但此处不需要“外部”。 (2认同)