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