次の Fortran コードがあります。説明してください..
OPEN(UNIT=4,STATUS='SCRATCH',ACCESS='DIRECT',RECL=2048,IOSTAT=IOCHK)
ここで、IOCHK は 0 に初期化されていません。ガベージ値が与えられているため、コードが機能しません。
IF(IOCHK.NE.0)THEN
// failed code
個別に初期化できますか?
次の Fortran コードがあります。説明してください..
OPEN(UNIT=4,STATUS='SCRATCH',ACCESS='DIRECT',RECL=2048,IOSTAT=IOCHK)
ここで、IOCHK は 0 に初期化されていません。ガベージ値が与えられているため、コードが機能しません。
IF(IOCHK.NE.0)THEN
// failed code
個別に初期化できますか?
kgiannakakis は正しいですIOCHK
。整数として宣言する必要があります。
ただし、他にもいくつか指摘しておきたいことがあります。
OPEN
ステートメントの後、IOCHK
I/O 操作のステータスが保持されます。IOCHK
単に破棄されるため、事前にの値を設定する必要はありません。IMPLICIT NONE
あります。これにより、このような宣言されていない変数にコンパイル時のエラーとしてフラグが付けられ、このような問題を簡単に見つけることができます。IOCHK は、コード内で宣言も初期化もされていません。OPEN ステートメントの前に、次のようなものが必要です。
INTEGER IOCHK
IOCHK = 0
上記は、整数変数を宣言し、それに値を割り当てます。
わざわざ変数を宣言したくない場合は、サブルーチンの先頭で次の行を使用できます。
implicit integer (i-n)
これにより、範囲 (in) 内の文字で始まるすべての変数が整数として宣言されます。
use
もちろん、対象のサブルーチンの先頭で変数を個別に宣言することも、ステートメントを介してコードの他の部分から見えるようにするために変数をモジュールに入れることもできます。
INTEGER :: IOCHK
IOCHK がまだ初期化されていないため、 file ステートメントの後でのみのステータスIOCHK
がチェックされるようにする必要があります。OPEN
デフォルトで変数が初期化される値は、コンパイラに依存します。例えば
program main
write(*,'(A8,I5)') 'M = ' ,M
stop
end program
M = 0
との両方ifort
で印刷されますgfortran
が、
program main
write(*,'(A8,ES20.5)') 'M = ' ,M
stop
end program
で失敗しgfortran
ます。
IOCHK
一般に、が明示的に宣言されていなくても問題はないと思います。例として、次のコードを考えてみましょう
PROGRAM MAIN
OPEN(UNIT=4,STATUS='SCRATCH',ACCESS='DIRECT',RECL=2048,IOSTAT=IOCHK)
IF(IOCHK==0) write(*,'(A8,I5)') 'IOCHK = ' ,IOCHK
STOP
END PROGRAM
ifort
両方でコンパイルすると、gfortran
これIOCHK = 0
が画面に表示されます。これは、スクラッチ ファイルが正常に開かれたことを意味します。
お役に立てれば
乾杯