愛しの Fortran・3改

Fortran について気の向くままに綴ります

OPEN 文の ACTION 指定子 (前編)

ファイルを新規に接続する OPEN 文では必ず ACTION 指定子を指定します。

  • 入力用に接続(WRITE 文、PRINT 文、ENDFILE 文に指定しない)→ "READ"

  • 出力用に接続(READ 文に指定しない)→ "WRITE"

  • 入出力用に接続(使用制限なし)→ "READWRITE"

これはプログラマの「決意表明」です。 ACTION="READ" を指定して WRITE 文に使ったとき、 ACTION="WRITE" を指定して READ 文に使ったとき、 これは規格上は単に「規格合致でない = 動作は未定義」です。

常識的には、処理系は「入出力誤り条件の集合は、処理系依存とする」 を適用して、ACTION に反する入出力文を誤りとして処理することが期待されます (たぶん、現状すべての処理系がそうなっています)。

ACTION 指定子の既定値は処理系依存です。 だから必ずプログラムに明記します。

      OPEN(FILE="A",STATUS="REPLACE",NEWUNIT=UNIT)

でファイル A の既定値が ACTION="READ" というへそ曲がりな処理系も規格上は許されています。 (ま、実際は ACTION を指定せずに問題が起きる処理系は現実にはありませんし、 そのような処理系実装は考えにくいですが)。 ACTION の指定自体はプログラムの誤り (読むはずのファイルにうっかり書いてしまう) を防ぐのに有用なので、積極的に利用しましょう。

なお、ACTION 指定子は Fortran 90 で導入されたので、 必ず指定すべきなのに FORTRAN 77 時代の本には書いてないので注意が必要です。

既定が FORTRAN 77 と同様な意味になる READWRITE であれば指定を省略しても新たに問題を生じることはなかったはずです。 とうして既定が処理系依存なのかというと、そのあたりについては後編で。

(つづく)