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

Fortran 无法在(1)处分配给INTENT(IN)变量x-如何解决此问题?,fortran,gfortran,pgi,Fortran,Gfortran,Pgi,使用gfortran(mpif90)编译Fortran程序时,我遇到以下错误: Error: Cannot assign to INTENT (IN) variable 'x' at (1) make[2]: [module.o] Error 1 (ignored) 当我用PGI编译这个程序时,我没有收到这个错误 关于这个我有两个问题 这个错误是什么意思 如何使gfortran和mpif90以类似于PGI的方式编译此模块文件?我是否可以传递一个标志来告诉gfortran编译器不要担心这个问题

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

Error: Cannot assign to INTENT (IN) variable 'x' at (1)
make[2]: [module.o] Error 1 (ignored)
当我用PGI编译这个程序时,我没有收到这个错误

关于这个我有两个问题

  • 这个错误是什么意思
  • 如何使gfortran和mpif90以类似于PGI的方式编译此模块文件?我是否可以传递一个标志来告诉gfortran编译器不要担心这个问题
    如有任何建议,将不胜感激

    如果您向我们展示了代码,这可能不仅仅是猜测,但接下来

    你有一个过程,一个函数或一个子例程,类似

    integer function my_func(x)
        real, intent(in) :: x
        ...
        x = a_value
        my_func = 2
    end function my_func
    
    语句
    real,intent(in)::x
    告诉编译器函数不会尝试更改参数
    x
    。然后,砰的一声,在
    x=a_值
    中,函数将继续并尝试更改参数

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

    其他编译器提出这个错误是完全正确的,即使我知道如何告诉编译器不要这样做,我也不会与您分享。这就像教你如何从咸肉切片机上卸下安全防护装置一样


    现在,给我们看一下你的代码,我们中的一个可以给你一个正确的诊断。

    不确定对此投反对票的原因,鉴于OP中完全没有代码,这似乎是一个很好的猜测。你完全正确。在模块文件的开头,我们为x声明了INTENT(In),然后,分配了x。由于某种原因,我在查看代码时忽略了这一点。如果我有街头信誉的话,我会投票的!这个文件有308行。如果你认为我应该发布它,我会的。嗯,因为我的猜测是正确的,所以不需要发布整个代码,甚至一个片段。如果你愿意,当你让代表回来投票时,即使在你现在的代表处,你也应该能够接受答案。