GCCバージョン4.6
問題:コマンドラインから実行可能ファイル(たとえば_a.out
_)にパラメーターをフィードする方法を見つけるには、より具体的には倍精度数の配列をフィードします。
Attempt:標準では古いREAD(*,*)
コマンドを使用します:Program _test.f
_-
_PROGRAM MAIN
REAL(8) :: A,B
READ(*,*) A,B
PRINT*, A+B, COMMAND_ARGUMENT_COUNT()
END PROGRAM MAIN
_
実行-
_$ gfortran test.f
$ ./a.out 3.D0 1.D0
_
これは機能しませんでした。少しの魂の探求で、それを見つけました
_$./a.out
3.d0,1.d0
4.0000000000000000 0
_
は機能しますが、2行目は入力プロンプトであり、これを1行で実行するという目的は達成されていません。また、COMMAND_ARGUMENT_COUNT()
は、Perlとは異なり、入力プロンプトに入力された数値が実際には「コマンドライン引数」としてカウントされないことを示しています。
コマンドラインでプログラムに引数を供給したい場合は、(Fortran 2003以降)標準の組み込みサブルーチンGET_COMMAND_ARGUMENT
を使用します。このようなものがうまくいくかもしれません
PROGRAM MAIN
REAL(8) :: A,B
integer :: num_args, ix
character(len=12), dimension(:), allocatable :: args
num_args = command_argument_count()
allocate(args(num_args)) ! I've omitted checking the return status of the allocation
do ix = 1, num_args
call get_command_argument(ix,args(ix))
! now parse the argument as you wish
end do
PRINT*, A+B, COMMAND_ARGUMENT_COUNT()
END PROGRAM MAIN
注意:
get_command_argument
の2番目の引数は、実際の(または何でも)に変換するために解析する必要がある文字変数です。 args
配列の各要素で許可されている文字は12文字のみであることに注意してください。これをいじってみてください。read
はFortranプログラムのコマンドライン引数の読み取りには使用されません。実数の配列を読みたいので、プログラムの開始後に端末からそれらを読み取るという、すでに理解しているアプローチを使用する方がよい場合があります。それはあなた次第です。