「異常終了」を表すためにを使用することを推奨するexit(-1)
、インターネット上の多くのレガシーソフトウェアや悪いチュートリアルに見られreturn -1
ます。問題は、少なくともPOSIXでは-1
、有効なステータスコードではなく、有効なステータスコードです。man 3 exit
はのexit()
値をstatus & 0377
親に返すことを示しています。つまり、に-1
なり255
ます。非POSIXシステムでEXIT_FAILURE
は、移植性のために推奨されます。しかし、「-1は異常終了を意味する」と「EXIT_FAILUREは1以外の可能性があります」とは表示されません。
これを永続化するStackOverflowの質問の例を次に示します。ソフトウェア「unrealircd」も、プログラムのexit(-1)
終了に使用するプログラムの例です。実際には、これにより、とのインターフェースが難しくなりますsystemd
。
このアンチパターンはどこから来たのですか?あるコンテキストで有効ですか?
1
「Unixライクなシステムは、0意味の成功の終了状態という強い大会があり、任意のゼロ以外の終了ステータスは失敗を表し...この規則は、かなりハードUnixシェルに配線されている...」(ゼロ以外の終了ステータスきれいな出口のために)
—
gnat
@gnat libcマニュアルによると、終了ステータスは明示的に0〜255です。ある時点で負の値が有効であると述べている答えがあれば、それを受け入れますが、それは非常に疑わしいと思います。
—
user222973
@gnat "255"はに簡単に収まり
—
user222973
unsigned char
ます。
@gnat「Java」のバイトは符号なし文字ではありません
—
user222973
char
。値の範囲が-128〜127であるため、aと同等です。さらに、質問の本文で「-1」が「255」に変換されると既に述べました。 。