8

Windows と GNU/Linux のそれぞれのアプリケーションの従来の戻り値は何ですか。0 は成功を意味します。ただし、ユーザーが要求したアボートで使用する必要があるもの。Windows で中止すると 3 が返されますが、この値が ERROR_PATH_NOT_FOUND でない場合、システム エラー コードのリストに含まれていません。GNU binutils は 1 を使用します。ユーザーの観点からは、GetLastError または errno を返すことは文書化されているため良いことですが、これらは下位レベルのステータス コードのみをカバーしているように見えます。「アプリケーションが正常に終了しませんでした」を表す値を探しています

私が傷つける理由は、私がしたいからです

exit(errcode)

アクセス違反/SIGSEGV (つまり、プログラミング エラー) が発生した場所に関するメッセージを出力した後にキャッチするシグナル ハンドラから。その場合、エラー コードはユーザー入力エラーと区別できる必要があります。

4

2 に答える 2

6

http://tldp.org/LDP/abs/html/exitcodes.htmlこれらは標準の終了コードです。残りはプログラムに依存していると思います。基本的に、探している特定のソフトウェアのドキュメントを確認する必要があります。@devnull が言ったように、ゼロ以外の終了コードは終了の失敗を意味します

于 2013-08-15T15:51:56.097 に答える
4

これは、終了コードに関するいくつかの規則にすぎません。いくつかのマニュアルの内容を見てみましょう:

GNU C ライブラリ リファレンス マニュアル

  1. 特定のプログラムが返すステータス値の種類には規則があります。最も一般的な規則は、成功の場合は 0、失敗の場合は 1 です。

  2. 一般的な規則では、特別な目的のために 128 以上のステータス値が予約されています

  3. 一部の非 POSIX システムでは、終了ステータス値に異なる規則を使用しています
  4. 移植性を高めるために、マクロEXIT_SUCCESSおよびEXIT_FAILURE を使用して、成功と失敗の従来のステータス値を指定できます。

ISO/IEC 9899:2011 (C11 規格)

status の値が0またはEXIT_SUCCESSの場合、正常終了ステータスの実装定義形式が返されます。status の値がEXIT_FAILUREの場合、失敗した終了ステータスの実装定義形式が返されます。それ以外の場合、返されるステータスは実装定義です。

つまり、必要に応じて (ほとんどの場合はそれで十分です)、成功または失敗を示すだけであれば、必ずEXIT_SUCCESSおよびEXIT_FAILUREを使用する必要があります。他のエラーを示したい場合は、独自の終了ステータスを再作成する必要があります。例えば:

#define HEX_FILE_CREATE 2
#define HEX_FILE_CREATE 3
...

何をどのように返品する必要があるかについて、追加のヒントがあります。

  1. 警告:エラー数を終了ステータスとして使用しないでください。これは実際にはあまり役に立ちません。親プロセスは通常、発生したエラーの数を気にしません。さらに悪いことに、ステータス値が 8 ビットに切り捨てられるため、機能しません。したがって、プログラムが 256 個のエラーを報告しようとした場合、親は 0 個のエラー、つまり成功のレポートを受け取ります。
  2. 同じ理由で、errno の値を終了ステータスとして使用することはできません。これらは 255 を超える可能性があります。

結論:

  1. 成功するには、常にEXIT_SUCCESSを使用します
  2. 失敗の終了ステータスは 1 から 127 の間でなければなりません
  3. errnoエラー コードを終了ステータスとして使用しないでください
于 2014-01-24T09:40:59.677 に答える