Fortran STOP文とEND文

Fortranには、プログラムの終了を表す「END」とプログラムの停止を表す「STOP」があります。

最初、この2つの違いがあまりよくわかっていませんでした。また、機能も似ているのでまとめてみました。

END文

END文は、上述の通りプログラムの終了を表します。したがって、END文がないとFortranは、プログラムが終わったかどうか分かりません。現にEND文がないとエラーメッセージが出力されます。

$ gfortran sample.f90
Error: Unexpected end of file in 'sample.f90'

STOP文

STOP文は、プログラムの停止を表します。END文を待つことなく、プログラムの実行を停止することができ、複数記述することができます。

integer::int
read(*,*)int
if( int == 0 ) then
   stop "Zero"
elseif( int > 0 ) then
   stop "Positive value"
else
   stop "Negative value"
endif
end

上記のプログラムのようにメッセージ文を記述することで、どこで停止したか明確になります。

しかし、条件次第で実行を停止するようなことをしない場合、STOP文は必要がない気がします。

実際、いろいろなFortranのプログラムを見てきましたが、途中で実行を停止しない場合でも必ずEND文の前にSTOP文が書かれています。

STOP文を省略したらどうなるのでしょうか。

STOP文あり

integer::a=4,b,c
b=245
c=sqrt(real(b)+a**2)
write(*,*)c
stop
end
$ gfortran sample.f90
$ ./a.out
16

STOP文なし

integer::a=4,b,c
b=245
c=sqrt(real(b)+a**2)
write(*,*)c
end
$ gfortran sample.f90
$ ./a.out
16

上記のように特にエラーメッセージが出力されることもなく、また計算結果も変化ありません。

省略はできそうです。しかし、プログラムによってはダメな場合があるようです。私は、今までそうなったことはありません。気づいていないかもしれませんが…

管理人

省略できたら、記述しないですよね…

気づかないうちに変な風にプログラムが動いている可能性が捨てきれない以上、律儀にSTOP文を記述した方がよさそうです。

まとめ

END文は、プログラムの終了を教える役割があります。

STOP文は、条件次第で実行を停止する際に活躍します。複数記述できます。

STOP文を省略しても問題ない場合もありますが、基本的に記述した方がよいです。