FORTRANでサブルーチンを書く時,
いろいろな場合を想定して,
なるべく汎用的なサブルーチンにしようとすると,
引数がどんどん増えて困ることがある.
大事な引数は2-3個なのに,
どうでもよいような引数がずらずらと並んでいると,
それだけで CALL .... と書く手が重くなってくる.
そのような時にENTRY文を使うと解決できる場合がある. ENTRY文とは, サブルーチンの途中から実行を始めるための文である.
*------ main program ------ REAL X(10) ....... CALL TABLE(X, 10) ....... END *---------------- SUBROUTINE TABLE(X,N) REAL X(N) DATA IOU /6/ SAVE WRITE(IOU,'(10F12.4)') X RETURN ENTRY IOUSET(IOU0) IOU = IOU0 RETURN END
このサブルーチンTABLEは
1次元配列Xを出力するものであるが,
TABLEだけを呼べば,
DATA文で指定されたIOUの機番(6)に出力される.
ファイルなど別の機番に出力させたい場合は,
TABLE を呼ぶ前にIOUSET を呼んで,
IOUを書き換えておけばよい.
つまり, 1つのサブルーチンに,
印刷すべき変数だけを与える入口と,
その他のパラメータを設定する入口の, 2つの入口を作るわけである.
ここで, 注意すべきことはSUBROUTINE文またはENTRY文で指定された引数は, そのSUBROUTINE文またはENTRY文から入った時でないと使えないことである. 例えば, このプログラムのENTRY文から入った時(IOUSETが呼ばれた時), 変数N を引用することはできない. 同じように, TABLEが呼ばれた時にIOU0を引用することはできないので, IOUSETが呼ばれたときにIOUに代入しておかなければならない. また, このようなプログラムでもSAVE文とDATA文は不可欠である.
Copyright (C) 2000 GFD Dennou Club. All rights reserved.