質問: フォートランの動作に関する質問 以下のような短いフォートランプログラムがあります。os:windows10 module com integer,parameter ::nd=10 end module program main use com print *, nd call sub stop end subroutine sub use com print *, nd return end 内容はモジュールで宣言したパラメータを確認してみるということです。 このプログラムがgfortranで動作せず、intel fortranでは全く問題ありません。 gfortranの結果は以下のようです。 f951.exe: fatal error: reading module 'com' at line 1 column 1: unexpected eof gnu fortran (rev1, built by msys2 project) 9.3.0 copyright (c) 2019 free software foundation, inc. gfortranのこのバージョンに何か問題があるのでしょうか。前からすこしおかしいことには気づいていたのですが。私のコードに問題があるでしょうか。 ※cが一番近いと思いましてこちらに上げました。
回答: 「com」という名前を使う必要はありますか? common とか command とかの省略のつもりだったでしょうか? と言うのも、windowsでは、デバイスを表す特殊ファイル名というのが存在します。ms-dos時代(以前)からの遺産です。 コンソール(キーボード)入力を示す con だとか、プリンタ出力を表す prnなど。 そういう予約ファイル名の中に、com0~com9 と言う物が存在します。 厳密に言えば com は com0 ではないので、intel fortran ではきちんと通るのかもしれません。 しかしgfortranの方では、com=com0のことだ、と解釈して、モジュールの com ではなく シリアルポートの com0 からの読み込みを行おうとしてしまい、eofに到達した(何も読めなかった)、と言うエラーが出てしまっているのかもしれません。 モジュール名を com 以外の物にしてみるとどうでしょう。 もちろん、次のような予約ファイル名と一致してはいけません。 予約ファイル名: con, prn, aux, nul, clock$, com0, com1, com2, com3, com4, com5, com6, com7, com8, com9, lpt0, lpt1, lpt2, lpt3, lpt4, lpt5, lpt6, lpt7, lpt8, lpt9