无法在(1)处分配给INTENT(IN)变量x - 如何解决这个问题?

Sea*_*gan 0 fortran gfortran pgi

在使用gfortran(mpif90)编译Fortran程序时,遇到以下错误:

Error: Cannot assign to INTENT (IN) variable 'x' at (1)
make[2]: [module.o] Error 1 (ignored)
Run Code Online (Sandbox Code Playgroud)

当我用PGI编译这个程序时,我没有收到这个错误.

我有两个问题.

  1. 这个错误是什么意思?
  2. 我怎样才能使gfortran和mpif90像PGI一样编译这个模块文件?是否有一个标志我可以通过告诉gfortran编译器不要担心这个?

任何建议,将不胜感激.

Hig*_*ark 8

如果您向我们展示了代码,这可能不仅仅是猜测,而是在这里......

你有一个程序,一个函数或一个子程序,如

integer function my_func(x)
    real, intent(in) :: x
    ...
    x = a_value
    my_func = 2
end function my_func
Run Code Online (Sandbox Code Playgroud)

该语句real, intent(in) :: x告诉编译器该函数不会尝试更改参数x.然后,bang,in x = a_value,函数继续向前并试图改变论证.

编译器的这种行为对安全编程有很大的帮助,如果PGI编译器在遇到这样的代码时确实没有引起错误,那么(a)它是错误的,标准要求它应该和(b)你不应该使用不安全的编译器.

其他编译器提出这个错误是非常正确的,即使我知道一种告诉编译器的方法,我也不会与你分享.这就像教你如何从培根切片机上取下保护罩一样.

现在,向我们展示您的代码,我们中的一个可以给您一个正确的诊断.

  • 由于OP中完全缺乏代码,因此不确定对此进行downvote的原因,似乎是一个非常好的猜测. (4认同)