【问题标题】:How to call an external function?如何调用外部函数?
【发布时间】: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


    【解决方案1】:

    在现代 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
    【解决方案2】:

    只需使用外部...

    ...
    REAL, EXTERNAL :: myfunction
    REAL           :: X, Y
    ...
    
    Y = myfunction(x)
    

    也就是说,让编译器做它所做的事情并捕捉容易遗漏的明显问题是更明智的......所以 jabirali 有一个很好的方法。

    【讨论】:

      猜你喜欢
      • 2018-05-27
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多