C++でint main
ではなくvoid main
を使用する必要があるのはなぜですか?
簡単に言えば、C++標準ではint
を返すためにmain()
が必要なためです。
おそらくご存知のとおり、main()
関数からの戻り値は、ランタイムライブラリによってプロセスの終了コードとして使用されます。 UnixとWin32はどちらも、プロセスの終了後にプロセスから返される(小さい)整数の概念をサポートしています。 main()
から値を返すことは、プログラマーがこの値を指定する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&argvの宣言または処理を無視できます。ただし、mainを呼び出すセットアップルーチンがintの戻り値を期待していて、その戻り値が見つからない場合、動作は未定義になる可能性があります。
簡潔な答え:
変更の主な理由
void main(){}
に
int main(){}
以降のリリースでは、実行中に通知エラーがプログラム中に発生したことを、それが実行されているオペレーティングシステムに通知しました
return 0;
0ではなく任意の数が返された場合にプログラムが正常に実行されたことを識別します。つまり、エラーコードメインによって返されました。 codeblock IDEで実行している場合、ビルドログでメインが0を返す場合は通常表示されます
Process terminated with status 0
それ以外の場合は、ステータスコードが赤で表示されます。これは、エラーが発生したことを意味します
ウィキペディアから:
メイン関数から返された値はプロセスの終了ステータスになりますが、C標準では特定の意味を
EXIT_SUCCESS
(従来はゼロ)とEXIT_FAILURE
の2つの値にしか割り当てていません。他の可能な戻り値の意味は実装定義です。
Cと同様、プロセスがOSに終了コードを与えるため。
あなたはどちらかを使うことができます
int main (int argc, char ** argv)
{
return (0);
}
または
int main (int argc, char ** argv)
{
exit (0);
}
これは少なくともC89 IIRCにあります。
Intは戻りコードなので、プログラムはOSに戻ることができます。
この値をクエリして、操作が成功したかどうかを確認できます。
これは、コマンドラインスクリプトを使用するときに非常に役立ちました。
おそらく、main()
メソッドからのステータスコードで完全に終了することが理にかなっているためです。 Javaでは、System.exit()
を使用してこれをエミュレートする必要がありますが、それほど優雅ではありません。
プログラムを実行して確認すると、正常に実行されるかどうかが確認されます。つまり、0を返した場合、それはtrueで正常に実行されたことを意味し、1を返した場合は正常に実行されません。このint
値は、プログラムが正常に実行されたかどうかをOSに通知します