内部模块子程序和显式接口

一个子程序 (它定义了一个程序 ),可以是一个 subroutinefunction; 它被认为是一个*内部子程序,*如果它是从相同的 program子程序中调用或调用它,如下所示

program my_program

  ! declarations
  ! executable statements,
  ! among which an invocation to
  ! internal procedure(s),
  call my_sub(arg1,arg2,...)
  fx = my_fun(xx1,xx2,...)

contains
  
  subroutine my_sub(a1,a2,...)
    ! declarations
    ! executable statements
  end subroutine my_sub

  function my_fun(x1,x2,...) result(f)
    ! declarations
    ! executable statements
  end function my_fun

end program my_program

在这种情况下,编译器将了解所有内部过程,因为它将程序单元视为一个整体。特别是,它将看到程序的 interface,即

  • 无论是 function 还是 subroutine
  • 这是参数 a1a2x1x2,…的名称和属性,
  • 这是结果 f 的属性 (在 function 的情况下)。

作为已知的接口,编译器可以检查传递给过程的实际参数(arg1arg2xx1xx2fx,…)是否与伪参数匹配(a1a2x1x2f,.. )。

在这种情况下,我们说接口是显式的

当子程序由包含模块本身的语句调用时,它被称为模块子程序

module my_mod

  ! declarations

contains
  
  subroutine my_mod_sub(b1,b2,...)
    ! declarations
    ! executable statements
    r = my_mod_fun(b1,b2,...)
  end subroutine my_sub

  function my_mod_fun(y1,y2,...) result(g)
    ! declarations
    ! executable statements
  end function my_fun

end module my_mod

或者通过另一个程序单元中的声明来说明该模块,

program my_prog

  use my_mod

  call my_mod_sub(...)

end program my_prog

与前面的情况一样,编译器将知道有关子程序的所有内容,因此,我们说接口是显式的