这个问题与问题有关:如何检测子程序中违反intent(in)
的问题。但我在相关问题Enforce intent(in) declared variables in Fortran as constant also in called subroutines/functions中找不到答案。
声明为intent(in)
的变量可以被另一个具有省略意图声明的子程序/函数修改。
例如:
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的任何错误/警告的情况下编译。所以我的问题是:
intent(inout)
?答案 0 :(得分:4)
两个答案都是NO。未指定的意图与所有其他意图根本不同。它与intent(inout)不同,因为您可以将一个不可定义的表达式传递给具有未指定intent的子例程。
同样在许多情况下,根本不允许指定intent(过程参数,Fortran 95中的指针,......)
如果您想要指定意图,可以将子程序定义为pure
,但它的功能远不止这些。但这对你来说可能是对的。它禁止任何副作用。
答案 1 :(得分:-2)
我认为由于自动定义的界面,您应该收到编译错误。我会期望同样的错误维度(例如我将fun2伪参数x切换为z,我认为更清楚地表明了我的观点)。
module test
implicit none
contains
subroutine fun1(x)
real(8), intent(in)::x
call fun2(x)
end subroutine
subroutine fun2(z)
real(3) :: z
z = 10
end subroutine
end module