这个问题与问题有关:如何检测子程序内部的意图(in)违规.但我在相关问题
Enforce intent(in) declared variables in Fortran as constant also in called subroutines/functions中找不到答案.
声明为intent(in)的变量可以由具有省略的intent声明的另一个子程序/函数修改.
例如:
module test
implicit none
contains
subroutine fun1(x)
real(8), intent(in)::x
call fun2(x)
end subroutine
subroutine fun2(x)
real(8) :: x
x = 10
end subroutine
end module
可以编译此代码而不会出现gfortran和ifort的任何错误/警告.所以我的问题是:
>是否可以禁止省略意图声明?
>是否可以强制Fortran编译器将省略的intent解释为intent(inout)?
最佳答案 两个答案都是NO.未指定的意图与所有其他意图根本不同.它与intent(inout)不同,因为您可以将一个不可定义的表达式传递给具有未指定intent的子例程.
同样在许多情况下,根本不允许指定intent(过程参数,Fortran 95中的指针,……)
如果您想要指定intent,您可以将子程序定义为纯子程序,但它的功能远不止于此.但这对你来说可能是对的.它禁止任何副作用.