如何调用外部函数?

时间:2017-02-19 22:41:45

标签: fortran

我有以下功能

REAL FUNCTION myfunction(x)

    IMPLICIT NONE
    REAL, INTENT(IN) :: x
    myfunction = SIN(x)

END FUNCTION myfunction

在名为myfunction.f90

的文件中

我想在其他f90文件中使用此功能。我怎么能这样做?

2 个答案:

答案 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有一个很好的方法。