0

使用 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 编译器不要担心这个?

任何建议,将不胜感激。

4

1 回答 1

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) 你不应该使用不安全的编译器。

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

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

于 2013-11-13T18:10:27.167 回答