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

时间:2013-11-13 17:59:56

标签: fortran gfortran pgi

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

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

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

我有两个问题。

  1. 这个错误是什么意思?
  2. 如何让gfortran和mpif90像PGI一样编译这个模块文件?是否有一个标志我可以通过告诉gfortran编译器不要担心这个?
  3. 任何建议将不胜感激。

1 个答案:

答案 0 :(得分:8)

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

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

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_value中,函数会向前发生并尝试改变参数。

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

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

现在,向我们展示您的代码,我们其中一人可以为您提供正确的诊断。