g77 コンパイラでコンパイルされ、gfortran で失敗する古い (~1995) レガシー fortran コードがいくつかあります。問題は次の行にあります (互換性のない型変換、文字から整数へ):
INTEGER CKYAN
DATA CKYAN / 'KYAN' /
変数 CKYAN は、トリガーとして 1 回だけ使用されます。
IF(IWVTX.EQ.CKYAN)THEN
CALL FDCVERTEXSWITCHTOKYAN()
ENDIF
整数 IWVTX は、入力ファイル (文字列 'KYAN' またはその他の文字列) から読み取られます。
私は fortran で重要な経験がなく、文字列から整数変数を初期化するときに何が起こっているかについてのドキュメントを見つけることができません。g77 コンパイラで確認しました。次のコード:
INTEGER it,ita,it1,it2,it3,it4,it5,it6
DATA it / 'KYAN' /
DATA ita / 'KYAN' /
DATA it1 / 'K' /
DATA it2 / 'Y' /
DATA it3 / 'A' /
DATA it4 / 'N' /
DATA it5 / 'O' /
DATA it6 / 'o' /
write(*,*) 'test', it, ita, it1, it2, it3, it4, it5, it6
出力を生成します:
1312905547 1312905547 538976331 538976345 538976321 538976334 538976335 538976367
したがって、文字列が等しい場合、数値も等しくなります。ある文字が別の文字の隣にある場合、そのコードは 1 増加します。
質問は次のとおりです。
- ここで何が起こっているのですか?
- 同じで利用可能なgfortranを実行する関数はありますか?
- または、他のファイルに触れずに、これを修正する簡単な方法はありますか?
誰でもこれで私を助けることができますか? 前もって感謝します。