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