回答:
違いは何であるexit(0)
とexit(1)
C言語では?
exit(0)
プログラムが正常に終了し、完全に移植可能である
exit(1)
ことを示し、While (通常)は異常終了を示します。ただし、その使用方法はポータブルではありません。
C標準では、Cプログラムから終了ステータスを定義EXIT_SUCCESS
しEXIT_FAILURE
て返すことに注意してください。
0
およびEXIT_SUCCESS
は、正常終了を示すために規格によって指定された値ですが、EXIT_FAILURE
異常終了を返すための標準値のみです。1
ただし、多くの実装で同じに使用されます。
参照:
C99標準:7.20.4.3 exit
機能
パラ5
最後に、制御がホスト環境に戻ります。statusの値が0またはの場合
EXIT_SUCCESS
、ステータスが正常に終了したことを示す、実装で定義された形式が返されます。statusの値がの場合、EXIT_FAILURE
実装が定義した形式のステータスが失敗して終了します。それ以外の場合、返されるステータスは実装定義です。
exit
あなたの懸念の少なくともある(地獄も存在しない場合がありますことが可能なライブラリC。何も移植性がありません!!! 111)。
exit
奇数の値で呼び出すと成功を示します。exit(0)
Cに準拠するために、特殊なケースとして扱われます。はい、POSIXは標準ですが、すべてのシステムがそれに準拠しているわけではありません。POSIXを前提とするコードを記述したい場合は、自由に記述できますが、コードの移植性が制限されます。
exit
C言語では、終了ステータスを表す整数を取ります。
通常、0の終了ステータスは、成功、またはプログラムの実行が成功したことによる意図的な終了と見なされます。
終了ステータス1は失敗と見なされ、通常、プログラムは何らかの理由で終了する必要があり、通常のプログラムフローのすべてを正常に完了できなかったことを意味します。
以下は、終了ステータスについて話しているGNUリソースです。
@Alsが述べたように、0と1の代わりに2つの定数を使用する必要があります。
EXIT_SUCCESS
規格によりゼロと定義されています。
EXIT_FAILURE
標準によって1つに制限されていませんが、多くのシステムでは1つとして実装されています。
0
前者の場合と1
後者の場合の違いは、環境に返される値です。
$ ./prog_with_exit_0
$ echo $?
0
$
そして
$ ./prog_with_exit_1
$ echo $?
1
$
また、マクロの値 EXIT_SUCCESS
と関数のEXIT_FAILURE
引数として使用されるのexit
は実装定義ですが、通常はそれぞれ0
ゼロ以外の数値に設定されます。(POSIXはEXIT_SUCCESS
0である必要があります)。したがって、通常exit(0)
は成功とexit(1)
失敗を意味します。
exit
内の引数を持つ関数の呼び出しmain
機能は、文と同じですreturn
、同じ引数を持ちます。
exit(0)は、exit(EXIT_SUCCESS)と同等です。
exit(1)は、exit(EXIT_FAILURE)と同等です。
失敗すると、通常、プロセスを終了するために正の値が返されます。シェルで$?を使用して見つけることができます。
シグナルによる終了を引き起こす128を超える値。したがって、シグナルによって終了したシェルコマンドがある場合、戻りステータスは(128+シグナル番号)でなければなりません。
例えば:
シェルコマンドがSIGINTで終了した場合、$?130(128 + 2)を返します(ここで2はSIGINTのシグナル番号です。kill -lを使用して確認してください)
exit()は常に整数値で呼び出す必要があり、ゼロ以外の値がエラーコードとして使用されます。
参照:exit()関数の使用
EXIT_FAILURE
したがって、単一の定数()では不十分です。