4. 禁止事項
4.1. 記憶列結合
- EQUIVALENCE
- COMMON
- モジュールを利用すれば不要である。COMMONブロックのうち値が一定のものはモジュール変数に書き換えよう。変数の加除を間違える心配がなくなる。初期化サブルーチンもまとめておけるので、何が入るかすぐにわかる。コモンブロックのうち毎ステップ値の変わるような値の一定でないものは、引数で渡すようにすると、どのサブルーチンでどのタイミングで値が変更されるかが明瞭になる。
- BLOCK DATA
- モジュールを利用すれば不要である。
- 文字長の不一致
- 文字数の引数の長さを誤ると予期せぬ動作がおこる。サブルーチンで長さをcharacter(len=*) のように宣言すると誤りを防ぐことができる。
- ENTRY
- ENTRYは複数のサブルーチンでデータを共有するために用いられてきた。共有されるべき変数をモジュール変数とし、ENTRYで定義される入り口ごとに サブルーチンを分ければENTRY文は不要である。
4.2. 新機能のうち冗長なもの
- INCLUDE
- 構造の不明確なINCLUDE行の機能よりもuse文の方が同じ効果をうまくもたらす。
4.3. 冗長な旧機能
- 固定形式
- 代わりに自由形式を使用すること。
- data 文の行位置
- data文は実行文の間におくことができるシステムも存在する。しかし、データ初期化は本来は宣言文に属するものであるので、実行文の間に置いてはいけない。
- 文関数
- 文関数は引用仕様が暗黙的であり、デバッグがしずらくなる。また、文関数自体や文関数定義が後続する文関数を引用してはならないなどの制限がある。 内部関数として書いた方がよい。
- 組み込み手続きの個別名
- 特に必要がない限り、総称名を使用すること。
4.4. 廃止予定事項
- 算術 IF 文
- 「IF (式) 文番号, 文番号, 文番号」の形式で、式の値の正負によってジャンプする文番号が選択されたり「GOTO (文番号, 文番号, …) 整数式」の形式で、式の値がnならばn番目の文番号にジャンプするという機能があった。
かわりに、ブロックif文を使用すること。
- 不整構造 DO 構文
- 多重のdo ループを同じ文番号で終えることはできなくなる予定。また、doループをend do文でも continue文でもない単純実行文で終えることはできなくなる予定。代わりにend doを用いること。
- 割り当て型GOTO文およびASSIGN文
- end if文への分岐
- 選択戻り
- サブルーチンの仮引数として*を列挙し、呼び出し側では*をつけた文番号を引数としてCALLすると、サブルーチン内で RETURN の後に整数型の式 (n とする)を書いた場合にサブルーチンから返るだけでなくn番目の * に対応するの文番号にジャンプする、という機能があった。廃止予定であるし、なにより判りにくい。「FORTRAN77で作ったオブジェクトが Fortran90 でリンクできない」といったトラブルの原因になることもある。
サブルーチンが異常な状態で終了したことを呼び出し元に伝えたいならば、そのための引数を追加すべきである。
- PAUSE 文
- H 型編集記述子
- 数字の後にHを書くと、そのあと数値の数だけの文字が文字型
4.5. その他
- タブ
- ソースコードの読みやすさと編集上の理由から、タブは禁止する。
- 処理系固有の仕様
- 規格非合致の拡張仕様を用いると汎用性を著しく損ねてしまうので使用しないこと。機種依存部分についてはチェックが困難であるため、著者がどういう環境・コンパイルオプションで動作確認したのかの情報があればよい。