虚拟争论的意图

子例程或函数中伪参数的 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 属性,它允许主程序的两个子程序调用。