虛擬爭論的意圖

子例程或函式中偽引數的 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 屬性,它允許主程式的兩個子程式呼叫。