gfortran を使用して Fortran 90 で純粋なサブルーチンを作成および呼び出す場合、コンパイラがこのエラーを出力する理由を確認するにはどうすればよいですか?
Error: Subroutine call to XXXX at (1) is not PURE
できるだけ具体的に質問すると同時に、他の人にも役立つように十分に一般的であるため、実際のコードに貼り付けることは避け、代わりに何が起こったのかをスケッチします。
Fortran 90 には純粋な手続きに関するさまざまな規則があることを理解しています。基本的には、関数またはサブルーチンのいずれかで副作用を許可しないこと、および で宣言されたサブルーチン パラメータの変更を許可しないことに要約すると思いますintent(in)
。最初に純粋であると宣言されておらず、パラメーターが意図を宣言していなかったにもかかわらず、副作用を実行しなかった一連のサブルーチンがあります。in
まず、すべてのパラメーター宣言を変更して、 、out
、またはのいずれかの意図を明示的に宣言しinout
ました。次に、すべてのサブルーチンを と宣言しましたPURE
。当然、最初の試行で多くのエラーが発生しましたが、コンパイラーがエラーの内容 (たとえば、このパラメーターを変更しているなど) を教えてくれたintent(in)
ので、それらをすべて修正しました。
ただし、これらのプロシージャ間で呼び出しが行われるため、今でも上記の形式のエラーが多数発生します: Subroutine call to XXXX at (1) is not PURE
. 私が理解していないのは、呼び出しが純粋ではない理由です。XXXX を純粋にするために考えられることはすべて実行しましたが、コンパイラはまだそうではないと考えています。
だから私の質問 - 言い換えれば - XXXX が純粋ではないと思う理由を gfortran に教えてもらうにはどうすればよいですか?