C ++で「void main」ではなく「int main」を使用する必要があるのはなぜですか? [複製]

StackOverflow https://stackoverflow.com/questions/449851

質問

    

この質問にはすでに回答があります:

         

C ++でint mainではなくvoid mainを使用する必要があるのはなぜですか?

役に立ちましたか?

解決

簡単な答えは、C ++標準ではmain()intを返す必要があるためです。

ご存知のように、<=>関数からの戻り値は、プロセスの終了コードとしてランタイムライブラリによって使用されます。 UnixとWin32は、プロセスが終了した後にプロセスから返される(小さな)整数の概念をサポートします。 <=>から値を返すことは、プログラマーがこの値を指定する1つの方法を提供します。

他のヒント

ほとんどのオペレーティングシステムは、アプリケーションが成功したかどうかをユーザーまたは呼び出しプロセスに報告します。これは、スクリプトがプログラムの結果に条件付きで分岐する場合(if-thenの場合)に特に役立ちます。次のようなもの:

// pseudo-code
screenscrape  http://mydatasource.com > results.txt
if errorlevel == 0 then
   processfile results.txt
else
   echo Screen Scraping Failed!
end if

この結果ステータスは、mainの戻り値を介して行われます。

一部のコンパイラではvoid mainを使用できますが、一貫性と単純さのために、ANSI標準ではmainの単一のプロトタイプが必要です:

int main(int argc, char *argv[]);

Cでは引数が呼び出し側によってクリーンアップされるため、mainの作成者は引数の宣言または処理を怠ることができますargc <!> amp; argv。ただし、mainを呼び出すセットアップルーチンがintの戻り値を予期し、代わりに見つからない場合、動作は未定義になります。

簡単な答え:

  • mainの戻り値は便利です スクリプト用。
  • mainを呼び出すセットアップおよびクリーンアップルーチンを使用するには、一貫したインターフェイスが必要です。

変更の主な理由

  

void main(){}

to

  

int main(){}

後のリリースでは、実行中にオペレーティングシステムへの実行中にプログラムで発生したエラーを通知することでした

return 0;

0以外の数字が返された場合、プログラムが正常に実行されたことを示します。これは、mainによって返された エラーコード であるエラーが発生したことを意味します。 codeblock IDE で実行している場合、ビルドログでmainが0を返す場合は通常表示されます

Process terminated with status 0

エラーが発生したことを意味するステータスコードを赤で表示する

ウィキペディアから:

  

メイン関数から返された値はプロセスの終了ステータスになりますが、C標準では2つの値EXIT_SUCCESS(従来はゼロ)とEXIT_FAILUREに特定の意味しかありません。他の可能な戻り値の意味は実装定義です。

Cと同様、プロセスはOSに終了コードを与えるため。

次のいずれかを使用できます

int main (int argc, char ** argv)
{
  return (0);
}

または

int main (int argc, char ** argv)
{
  exit (0);
}

これは少なくともC89 IIRCにあります。

intはプログラムがOSに返すことができるリターンコードであるため。

この値をクエリして、操作が成功したかどうかを確認できます。

これは、コマンドラインスクリプトを使用するときに非常に役立ちました。

プログラムを実行して、プログラムが正常に実行されるかどうかを確認します。したがって、0が返された場合は、真の<!> ampであることを意味します。正常に実行され、1が返された場合、正常に実行されていません<!> amp;このint値は、プログラムが正常に実行されたかどうかをOSに通知します

おそらく、main()メソッドからのステータスコードできれいに終了するのが理にかなっているからでしょう。 Javaでは、System.exit()を使用してこれをエミュレートする必要がありますが、これはそれほど優雅ではありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top