指针-如何使用接口块将函数传递给子例程?

我了解interface命令可用于将函数传递给子例程.因此,例如在主程序中,我将定义一些函数,然后将其传递给某些子例程,例如:

MainProgran

Use ....

Implicit None

Type decorations etc

Interface
   Function test(x,y)
   REAL, INTENT(IN) :: x, y
   REAL :: test
   END function
End Interface

   Call Subroutine( limit1, limit2, test, Ans)


End MainProgram

这是正确的方法吗?我很困!同样在子例程中,我需要输入任何内容来告知它有函数要传入吗?在这种情况下,子例程将是一个库,因此,我不需要继续重新编译它来更改功能.

最佳答案
模块:

module fmod
    interface
       function f_interf(x,y)
       real, intent(in) :: x, y
       real :: f_interf
       end function
    end interface

contains 
    function f_sum(x,y)
    real, intent(in) :: x, y
    real f_sum

    f_sum = x + y

    end function

    function f_subst(x,y)
    real, intent(in) :: x, y
    real f_subst

    f_subst = x - y

    end function

    subroutine subr(limit1, limit2, func, ans)
    real limit1, limit2
    procedure(f_interf) func
    real ans

    ans = func(limit1, limit2)
    end subroutine
end module

主程序:

program pass_func
use fmod
Implicit None
real ans, limit1, limit2
limit1 = 1.0
limit2 = 2.0
call subr( limit1, limit2, f_subst, ans)
write(*,*) ans
call subr( limit1, limit2, f_sum, ans)
write(*,*) ans
end program pass_func

并输出:

  -1.000000
   3.000000

转载注明原文:指针-如何使用接口块将函数传递给子例程? - 代码日志