内部模块子程序和显式接口
一个子程序 (它定义了一个程序 ),可以是一个 subroutine 或 function; 它被认为是一个*内部子程序,*如果它是从相同的 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,
- 这是参数 a1,a2,x1,x2,…的名称和属性,
- 这是结果 f的属性 (在function的情况下)。
作为已知的接口,编译器可以检查传递给过程的实际参数(arg1,arg2,xx1,xx2,fx,…)是否与伪参数匹配(a1,a2,x1,x2,f,.. )。
在这种情况下,我们说接口是显式的。
当子程序由包含模块本身的语句调用时,它被称为模块子程序,
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
与前面的情况一样,编译器将知道有关子程序的所有内容,因此,我们说接口是显式的。