違いは何ですか?どちらが好ましいですか、またはそれぞれをいつ使用する必要がありますか?
5 に答える
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
失敗した終了ステータスの実装定義形式が返されます。それ以外の場合、返されるステータスは実装定義です。
移植性の高いコードの場合EXIT_FAILURE
は、 を使用することをお勧めします。EXIT_FAILURE
C 標準では、 、0
、およびEXIT_SUCCESS
(0
とはEXIT_SUCCESS
本質的に同義)の 3 つの値の意味のみが定義されています。
実用的な観点から、ほとんどの典型的なシステムは他の値も受け入れます。メモリが機能する場合、Linux では任意の 8 ビット値を返すことができ、Windows では 16 ビット値を返すことができます。正直なところ、IBM メインフレームや VMS などへの移植を気にかけているのでない限り、少なくとも 8 ビットの戻り値をサポートしないシステムのほとんどは気にしない可能性があります。
を使用しEXIT_FAILURE
ます。これは、OS全体で使用される定数です。その値は1以外の値である可能性があり、コード内でより説明的です。
特定のプログラムが返すステータス値の種類には規則があります。最も一般的な規則は、成功の場合は 0、失敗の場合は 1 です。比較を実行するプログラムは、異なる規則を使用します。ステータス 1 を使用して不一致を示し、ステータス 2 を使用して比較できないことを示します。既存の規則が適切である場合、プログラムは既存の規則に従う必要があります。
一部の非 POSIX システムでは、終了ステータス値に異なる規則を使用しています。、それぞれ成功と失敗の従来のステータス値に
For greater portability
マクロEXIT_SUCCESS
とを使用できます。EXIT_FAILURE
これらはファイル stdlib.h で宣言されています。