違いは何ですか?どちらが優先されますか、またはそれぞれをいつ使用する必要がありますか?
exit(1)
(通常)は、正常に終了しなかったことを示します。ただし、その使用法は移植性がありません。たとえば、 OpenVMS では、exit(1)
は実際に成功を示します。
失敗した終了を返すための標準値は_EXIT_FAILURE
_のみですが、多くの実装では_1
_が同じために使用されます。
要約すると:
完全に移植可能なコードの使用を記述したい場合は、
失敗の場合は_EXIT_FAILURE
_。一方、
成功の場合は、exit(0)
または_EXIT_SUCCESS
_を使用できます。
_EXIT_SUCCESS
_または_0
_は両方とも同じであることに注意してください。
参照:
C99標準:7.20.4.3 exit
関数
Para 5
最後に、制御がホスト環境に戻ります。ステータスの値が
zero
または_EXIT_SUCCESS
_の場合、ステータスが正常に終了した実装定義形式が返されます。ステータスの値が_EXIT_FAILURE
_の場合、ステータスが実装に定義された形式の失敗した終了が返されます。それ以外の場合、返されるステータスは実装定義です。
本当に移植可能なコードの場合、EXIT_FAILURE
が推奨されます。 C標準では、EXIT_FAILURE
、0
、およびEXIT_SUCCESS
の3つの値の意味のみを定義しています(0
およびEXIT_SUCCESS
は本質的に同義です)。
実用的な観点から、most典型的なシステムは他の値も受け入れます。メモリが提供される場合、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で宣言されています。