23

main関数から1000のような大きな値を返そうとしていますが、入力echo $?すると0が表示されます。

100のような小さい値を返すと、正しい値が表示されます。

私のコード:

int main(void)
{
     return 1000;
}

返すことができる値に制限はありますか?

4

3 に答える 3

24

ここには、Cの終了ステータスとbashの戻りコードという2つの関連する概念があります。どちらも0〜255の範囲をカバーしますが、bashはそれ自体の目的で126を超える数値を使用するため、プログラムからそれらを返すのは混乱します。

安全のために、終了ステータスコードを0〜127に制限します。これは最も移植性が高いため、少なくともhttp://docs.python.org/library/sys.html#sys.exitによって示されます。

Cの終了ステータスはbash$?に入れられます。実行後は変数ですが、bashは127を使用して「コマンドが見つかりません」を示しているため、これは避けてください。Bashリファレンスページ

Bashはシグナルにも128-255を使用します。これらは、プロセスがシグナルで強制終了されたことを示します exit code = 128 + signal number。したがって、信号番号がそれほど高くなる可能性は低いため、255に近い番号を使用することで回避できる可能性があります。

これらの一般的なガイドラインを超えて、さまざまな数値が何を意味するかを定義する多くの試みがあります:http: //tldp.org/LDP/abs/html/exitcodes.html

したがって、プログラムから任意の整数を返したい場合は、それをstdoutに出力しVALUE=$(program)、bashスクリプトからキャプチャするのがおそらく最善です。

于 2010-09-17T09:28:54.700 に答える
3

の戻り値main(つまり、アプリケーションの終了状況)は、* NIXの範囲[0、255]に制限されています。1000は範囲外であり、OSはおそらくそれを0として扱います。

于 2010-09-17T09:30:30.627 に答える
1

Unixランドでは、8ビットバイトの範囲に制限されているmainため、の戻り値は制限されています。exit

Windowsには、値259の単一の値があり、STILL_ACTIVEプロセスの終了コードとして回避するのが最適です。

それ以外に、Windowsでは、HRESULTやなどの32ビットコードを返すことができます。これは一般的に行われています。

于 2014-05-29T17:48:41.343 に答える