可配置物件作為虛擬引數 (Fortran 2003)
與可配置虛擬引數相關聯的實際引數必須是變數。
如果可配置虛擬引數是陣列,則相關聯的實際引數也必須是相同等級的陣列。 實際引數的非延遲類型參數必須與虛擬引數的參數一致。
與可配置之虛擬引數相關聯的實際引數必須延遲與虛擬引數相同的類型參數。
在程序登錄上,可配置虛擬引數的配置狀態會變成相關聯實際引數的配置狀態。 如果虛擬引數是 INTENT(OUT) ,且已配置相關聯的實際引數,則會在程序呼叫時取消配置實際引數,以便虛擬引數具有未配置的配置狀態。 如果虛擬引數不是 INTENT(OUT) ,且已配置實際引數,則虛擬引數的值是相關聯實際引數的值。
當程序處於作用中狀態時,可以配置、取消配置、定義或變成未定義沒有 INTENT(IN) 的可配置虛擬引數。 如果發生任何這些事件,則不允許透過另一個別名來參照相關聯的實際引數。
從常式結束時,實際引數具有可配置虛擬引數的配置狀態 (當然,如果可配置虛擬引數具有 INTENT(IN),則沒有變更)。 一般規則適用於將值從虛擬引數傳播至實際引數。
在其為虛擬引數的程序中執行 RETURN 或 END 陳述式時,不會自動取消配置可配置虛擬引數。
範例
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