Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

【Fortran】エラーメッセージ「Error: 'XXX' of module 'YYY', imported at (1), is also the name of the current program unit」

XXXには関数名が、YYYにはモジュール名が入る。外部副プログラムをインターフェイス・モジュールを使用して利用をしているとき、例えばあるプログラムでその外部副プログラムを使用するときは、use文を使ってモジュールの使用宣言を行う必要がある。
use YYY (←YYYはモジュール名)
外部サブルーチン(外部副プログラムのみで構成された一つのファイル)に含まれる関数において、そのファイルの中に含まれている別の関数を使用するときは、呼ぶ側の関数でuse文を使用して、自分自身が含まれるモジュールの使用宣言をする必要がある。自分自身のインターフェースも含まれてしまうことから、本来エラーとなる。 gfortran(GNU Fortran)のバージョン4.5.2ではこのようなときは特に問題が起きなかったが、バージョン4.7.0ではエラーが発生し、コンパイルできなくなった。このような状態の時は、コンパイル時に標記のエラーメッセージが出る。 使用する関数自身が含まれるインターフェースを使用してのuse文を使用するときは、only句を使用すること。具体的には、use文を使用するときに以下のようにする。
use YYY, only : ZZZ
YYYはモジュール名、ZZZはその使用する関数内で使用するモジュール関数名もしくはモジュールサブルーチン名。使用するものだけ、only句のあとに列記する。複数ある時は、コンマで区切る。こうすれば、エラーは出なくなる。 数値計算のためのFortran90/95プログラミング入門(第1版第5刷)の131ページに、これに関係することが記述されている。下部には、only句を使用しなくてもエラーを表示しないコンパイラもあると説明されている。バージョン4.5.2ではまさにそうであったが、4.7.0からはエラーとなるようになったようだ。 Fortran 90プログラミング Fortran90入門―基礎から再帰手続まで 数値計算のためのFortran90/95プログラミング入門 FORTRAN 90 for Engineers and Scientists