62

違いは何ですか?どちらが好ましいですか、またはそれぞれをいつ使用する必要がありますか?

4

5 に答える 5

75

exit(1)(通常) 終了の失敗を示します。ただし、その使用法は移植性がありません。たとえば、OpenVMSでは、exit(1)実際には成功を示します。

OnlyEXIT_FAILUREは、失敗した終了を返すための標準値ですが1、多くの実装で同じために使用されます。


要約
すると、完全に移植可能なコードを書きたい場合は、

EXIT_FAILURE故障の場合。一方、成功の場合 はまたはの
いずれかを使用できます。exit(0)EXIT_SUCCESS

EXIT_SUCCESSまたは0両方とも同じであることに注意してください。


参照:

C99 標準: 7.20.4.3exit関数
パラ 5

最後に、制御がホスト環境に戻されます。status の値がzeroまたは のEXIT_SUCCESS場合、処理系定義のステータスの成功した終了の形式が返されます。status の値が の場合、EXIT_FAILURE失敗した終了ステータスの実装定義形式が返されます。それ以外の場合、返されるステータスは実装定義です。

于 2012-12-02T07:43:12.360 に答える
15

移植性の高いコードの場合EXIT_FAILUREは、 を使用することをお勧めします。EXIT_FAILUREC 標準では、 、0、およびEXIT_SUCCESS(0とはEXIT_SUCCESS本質的に同義)の 3 つの値の意味のみが定義されています。

実用的な観点から、ほとんどの典型的なシステムは他の値も受け入れます。メモリが機能する場合、Linux では任意の 8 ビット値を返すことができ、Windows では 16 ビット値を返すことができます。正直なところ、IBM メインフレームや VMS などへの移植を気にかけているのでない限り、少なくとも 8 ビットの戻り値をサポートしないシステムのほとんどは気にしない可能性があります。

于 2012-12-02T07:44:36.193 に答える
5

を使用しEXIT_FAILUREます。これは、OS全体で使用される定数です。その値は1以外の値である可能性があり、コード内でより説明的です。

于 2012-12-02T07:42:00.533 に答える
1

特定のプログラムが返すステータス値の種類には規則があります。最も一般的な規則は、成功の場合は 0、失敗の場合は 1 です。比較を実行するプログラムは、異なる規則を使用します。ステータス 1 を使用して不一致を示し、ステータス 2 を使用して比較できないことを示します。既存の規則が適切である場合、プログラムは既存の規則に従う必要があります。

一部の非 POSIX システムでは、終了ステータス値に異なる規則を使用しています。、それぞれ成功と失敗の従来のステータス値にFor greater portabilityマクロEXIT_SUCCESS とを使用できます。EXIT_FAILUREこれらはファイル stdlib.h で宣言されています。

于 2012-12-02T07:43:10.343 に答える