2016-04-05 11 views
1

私はサンプルコードを読んでいましたが、エラーメッセージではreturn -1;を使用し、メイン関数ではreturn 0;を使用していました。しかし、主関数の戻り値をreturn 10000;に置き換えた場合でも、それはエラーなしで構築され、実行されます。これは、戻り値が任意に選択でき、コンピュータに意味を持たないことを意味しますか(一部のユーザー定義操作に戻り値を使用する場合を除きます)。異なる場合に戻り値を割り当てる際の通常の規約は何ですか?C++のmain関数の戻り値の規則は何ですか?

+1

'の戻り値'main'はオペレーティングシステムに何かを指示するので、' main'は他の関数とは異なります。他の関数で好きなことをすることができます。 –

答えて

3

他のアプリケーションでは、メイン関数(アプリケーション)からの戻り値を使用して、プログラムの終了方法を示すことができます。プログラムが正常に終了し、その他の整数(negative or positive)が問題またはその他の条件があることを示している場合、従来は0が使用されていました。

これらはアプリケーションごとに異なります。これらのマニュアルでは、それぞれの戻り値の意味を説明しています。

たとえばあなたがgrepコマンドマニュアル(http://www.gnu.org/software/grep/manual/html_node/Exit-Status.html)を見ることができる、それは1が何行が選択していないと2libcを使用するシステムでエラー

0

戻り値は、関数定義で指定され:そして

ret function(params); 

、タイプretの任意の値は、コンパイラによって受け入れられます。

例:

int main(); 

は(-INT_MAX+INT_MAX間)タイプintの任意の値を返すことができます。この範囲外の値は、コンパイラによって自動的にキャストされます。ただし、intの値以外(たとえば、return std::vector<int>())は、コンパイラのエラーにつながります。

具体的には、main関数の場合、任意の値を返すことができます。コンベンションは、エラーが発生していないときは0を返し、エラーが発生したときは何も返しません。エラー値は、必要に応じて正または負にすることができます。

1

があったことを意味し、ラインを選択した場合、終了値0があると述べています、プログラムが終了したときに次のことが起こる、ほとんどのUnixシステムの大多数である:atexitまたはon_exitに登録

  1. 関数は、逆の順序で呼び出されます
  2. すべてオープンストリームはそれを切り捨て終了ステータスの8ビットが保持されているプログラム

だけ下位に、終了、

  • _exitが呼び出される任意のバッファリングされた出力データを書き出す、閉じています0255の間の値。戻り状況の処理方法は、親プロセスによって異なります。たとえば、親プロセスがBashの場合、0127の間の値はユーザー定義の値ですが、128+は特別に扱われます。

  • 1

    慣例として、のメイン値の戻り値は、多くの場合、プログラムが正常に実行されたOSおよびユーザーにとってヒントです。異なる値を使用して、異なるエラーコードまたは成功した実行の異なるパスを表すことができますプログラムに固有です。あなたは自由に選ぶことができます。

    他の関数プログラムでは、戻り値の解釈は開発者の責任です。

    0

    ポータブル戻り値はEXIT_SUCCESSと同じ値を返すEXIT_SUCCESSEXIT_FAILURE、及び0(ある。これらのマニフェストコンタクトが定義されている。他の値の意味は、システム固有である。