內部模組子程式和顯式介面
一個子程式 (它定義了一個程式 ),可以是一個 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
與前面的情況一樣,編譯器將知道有關子程式的所有內容,因此,我們說介面是顯式的。