平衡点
2012/09/05
_ Fortran (>=90) での getarg, iargc
他にも良い解説があると思いますが, メモがてらに書いておきます.
プログラム実行時にコマンドライン引数を渡すことは良く行なわれます. FORTRAN77で書かれたプログラムを実行する際にコマンドライン引数を取得するために使われる関数に GETARG, IARGCがあります. IARGC はコマンド引数の数を INTEGER として取得する subroutine, GETARG コマンドライン引数を CHARCTER として取得する subroutine です.
例えば
# source: fortran PROGRAM TEST_GETARG INTEGER I CHARACTER ARG*32 DO I = 1, IARGC() CALL GETARG(I, ARG) WRITE(*,*), ARG END DO END PROGRAM TEST_GETARG
というように使うことができます. このGETARGはGNU FORTRAN77g77で提供されていたGNU拡張ですが, 他の多くのベンダーコンパイラにおいても使用することができます(多分).
この GETARG, IARGC はFortran 2003 の規格で GET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT として取り込まれました. GNU のドキュメントでも以下のように記載されています.
- Description
Retrieve the POS-th argument that was passed on the command line when the containing program was invoked.
This intrinsic routine is provided for backwards compatibility with GNU Fortran 77. In new code, programmers should consider the use of the GET_COMMAND_ARGUMENT intrinsic defined by the Fortran 2003 standard.
...あれ? じゃ Fortran90とFortran95は?
今のところGNU Fortran しかり, ベンダーのコンパイラしかりGETARG, IARGC, GET_COMMAND_ARGUMENT, COMMAND_ARGUMENT_COUNT, すべて組み込み関数として実装されているみたいですが, それを過信するわけにもいきません. 規格にないし.
というわけで configure 時には必ずこれらの関数が実装されているかのチェックを行なう事になります. 個人的には面倒だなぁ, とは思いますが, まあしょうがないですよね.