0

gfortran (mpif90) を使用して Fortran プログラムをコンパイルすると、次のエラーが発生します。

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

このプログラムを PGI でコンパイルすると、このエラーは発生しません。

これに関して2つ質問があります。

  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 に答える