内部模块子程序和显式接口
一个子程序 (它定义了一个程序 ),可以是一个 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
与前面的情况一样,编译器将知道有关子程序的所有内容,因此,我们说接口是显式的。