fortran – 如何强制编译器将省略的intent解释为intent(inout)

这个问题与问题有关:如何检测子程序内部的意图(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,您可以将子程序定义为纯子程序,但它的功能远不止于此.但这对你来说可能是对的.它禁止任何副作用.

点赞