虛擬爭論的意圖
子例程或函式中偽引數的 intent
屬性宣告其預期用途。語法是其中之一
intent(IN)
intent(OUT)
intent(INOUT)
例如,考慮這個功能:
real function f(x)
real, intent(IN) :: x
f = x*x
end function
intent(IN)
指定在整個函式或其初始化期間永遠不會定義(非指標)偽引數 x
或變為未定義。如果指標偽引數具有屬性 intent(IN)
,則這適用於其關聯。
用於非指標偽引數的 intent(OUT)
意味著在呼叫子程式時偽引數變為未定義(除了具有預設初始化的派生型別的任何元件),並且在執行期間設定。作為偽引數傳遞的實際引數必須是可定義的:不允許傳遞命名或文字常量或表示式。
與之前類似,如果指標偽引數為 intent(OUT)
,則指標的關聯狀態變為未定義。這裡的實際引數必須是指標變數。
intent(INOUT)
指定實際引數是可定義的,並且適用於傳入和返回過程中的資料。
最後,偽引數可能沒有 intent
屬性。這樣的偽引數的使用受到傳遞的實際引數的限制。
例如,考慮一下
integer::i = 0
call sub(i, .TRUE.)
call sub(1, .FALSE.)
end
subroutine sub(i, update)
integer i
logical, intent(in) :: update
if (update) i = i+1
end subroutine
引數 i
可以沒有 intent
屬性,它允許主程式的兩個子程式呼叫。