web-dev-qa-db-ja.com

Fortranの「停止」と「終了」の違いは何ですか?

Fortranのstopexitの違いは何ですか?

どちらも、いくつかのエラー情報でプログラムをすぐに終了できます。

17
Terry Qiao

Fortranのexitは、ループを終了するか、他の構成要素の実行を完了するステートメントです。ただし、問題は、stopステートメントに密接に関連している多くのコンパイラーによって提供される、関数またはサブルーチンとしての非標準の拡張についてです。

たとえば、 gfortranは などです。

このexitの使用は非標準であるため、特定の実装のドキュメントを参照して、これがどのような形式をとり、どのような影響を与えるかを確認してください。

一方、stopステートメントは、標準のFortranステートメントです。このステートメントは、Fortranプログラムの実行のnormal終了を開始します(そして、開始するerror stopステートメントと比較できますエラー終了)。

(通常は)プログラムの実行の終了がstopステートメントの後に続くこと、および停止コードがあることを知る以外は、実際に発生する方法は、実装に開放されたままです。何が起こるかについて、いくつかの推奨事項があります(ただし、これらは推奨事項にすぎません)。たとえば、Fortran 2008では、

  • 停止コード(整数または文字列)を「エラー」ユニットに出力します。
  • 停止コードが整数の場合、プロセスの終了ステータスとして使用されます。
  • 停止コードがない場合(または文字の場合)、終了ステータスとしてゼロが返されます。

上記は、多くの設定で上記の概念が適用されないため、かなり曖昧です。

通常、実際にはexitはその名前のCライブラリの関数に似ており、その効果はstopのように停止コードなしです(ただし、指定されたステータスをOSに返します)。

要約すると、Fortranはstopexitの違いについては説明していません。 exitの使用(終了用)は移植性がなく、stopの効果さえ完全には定義されていません。

15
francescalus

stopはfortranステートメントですが、exitはたまたまプログラムを終了させる関数です。

stopステートメントは、その引数[文字列にすることもできます]をstderrに出力します

stop 123

そして、それは親プロセスにゼロのステータスを返します。

一方、exitは関数であり、他のように呼び出す必要があります。また、無音になります(つまり、メッセージは表示されません)。

call exit(123)

終了するための引数は、ステータスとして親プロセスに返されます

8
Craig Estey