Fortran虚拟参数的意图

示例

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允许主程序的两个子例程调用的属性。