可配置物件作為虛擬引數 (Fortran 2003)

F2008 開始與可配置虛擬引數相關聯的實際引數必須是變數。F2008 結束 如果可配置虛擬引數是陣列,則相關聯的實際引數也必須是相同等級的陣列。 實際引數的非延遲類型參數必須與虛擬引數的參數一致。

與可配置之虛擬引數相關聯的實際引數必須延遲與虛擬引數相同的類型參數。

在程序登錄上,可配置虛擬引數的配置狀態會變成相關聯實際引數的配置狀態。 如果虛擬引數是 INTENT(OUT) ,且已配置相關聯的實際引數,則會在程序呼叫時取消配置實際引數,以便虛擬引數具有未配置的配置狀態。 如果虛擬引數不是 INTENT(OUT) ,且已配置實際引數,則虛擬引數的值是相關聯實際引數的值。

當程序處於作用中狀態時,可以配置、取消配置、定義或變成未定義沒有 INTENT(IN) 的可配置虛擬引數。 如果發生任何這些事件,則不允許透過另一個別名來參照相關聯的實際引數。

從常式結束時,實際引數具有可配置虛擬引數的配置狀態 (當然,如果可配置虛擬引數具有 INTENT(IN),則沒有變更)。 一般規則適用於將值從虛擬引數傳播至實際引數。

在其為虛擬引數的程序中執行 RETURNEND 陳述式時,不會自動取消配置可配置虛擬引數。

附註: 具有 INTENT(IN) 屬性的可配置虛擬引數不得在被呼叫的程序內變更其配置狀態。 此類虛擬引數與一般虛擬引數之間的主要差異在於它可能在輸入時 取消配置 (以及在整個程序執行期間)。

範例

SUBROUTINE LOAD(ARRAY, FILE)
   REAL, ALLOCATABLE, INTENT(OUT) :: ARRAY(:, :, :)
   CHARACTER(LEN=*), INTENT(IN) :: FILE
   INTEGER UNIT, N1, N2, N3
   INTEGER, EXTERNAL :: GET_LUN
   UNIT = GET_LUN() ! Returns an unused unit number
   OPEN(UNIT, FILE=FILE, FORM='UNFORMATTED')
   READ(UNIT) N1, N2, N3
   ALLOCATE(ARRAY(N1, N2, N3))
   READ(UNIT) ARRAY
   CLOSE(UNIT)
END SUBROUTINE LOAD