1.5.9 EXTERNAL文とINTRINSIC文

EXTERNAL文は, そこに指定されたメソッド(元関数)名が外部メソッド(元関数)であることを宣言するものであり, INTRINSIC文は, そこに指定されたメソッド(元関数)名が組み込みメソッド(元関数)であることを宣言するものである. これらは, 上記のようにメソッド(元関数)名をメソッド(元サブルーチン)の実引数として使用する時に 必ず必要なものであるが, それ以外も重要な意味がある.

sincosのような組み込みメソッド(元関数)は, FORTRAN規格によって処理系が用意しなければならないが, FORTRAN規格はさらに処理系が規格外の組み込みメソッド(元関数)を用意することを許している. したがって, 各処理系はFORTRAN規格に定められた組み込みメソッド(元関数)よりも多くの 組み込みメソッド(元関数)を持っているのが普通である. そして当然のことながら, それら拡張された組み込みメソッド(元関数)の名前に関しては, 処理系によって全く異なる. ということは, FORTRAN規格にないメソッド(元関数)名で, EXTERNAL文やINTRINSIC文によって宣言されていないメソッド(元関数)名は, 処理系によって組み込みメソッド(元関数)として解釈されたり外部メソッド(元関数)として解釈されたり することがある.

例えば, 自分で外部メソッド(元関数)を定義して, それを引用しているつもりでも, たまたまその処理系が同名の組み込みメソッド(元関数)を持っていた場合には, ユーザー定義のメソッド(元関数)ではなく, 処理系が用意したメソッド(元関数)が呼ばれてしまう可能性がある. メソッド(元関数)名の長さは6文字以内と制限されている上, 人間の発想も多様性に限りがあるので, この手の衝突は意外に多い. しかも, この種の原因でプログラムが暴走したりすると, その原因を突き止めるのはかなり難しい. (自分のプログラムそのものには全く誤りがないのだから)

そこで, 処理系に依存しないプログラムを書くためには, そのプログラム単位で引用している外部メソッド(元関数)名は全て EXTERNAL文に指定することが望ましい. また, FORTRAN規格にない処理系固有のメソッド(元関数)を引用している場合には, INTRINSIC文に指定すべきである.

なお, 当然のことながら, 電脳ライブラリが用意するメソッド(元関数)は全て「外部メソッド(元関数)」である. 処理系から見れば電脳ライブラリを含めて全て「ユーザープログラム」 であるから, 自分が書かなかったからといって組み込みメソッド(元関数)と混同することのないように 注意されたい.