內部模組子程式和顯式介面

一個子程式 (它定義了一個程式 ),可以是一個 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

與前面的情況一樣,編譯器將知道有關子程式的所有內容,因此,我們說介面是顯式的