C ++ではint main
なく使用する必要があるのはなぜですか?void main
8 に答える
簡単に言うと、C++標準では。main()
を返す必要があるためint
です。
ご存知かもしれませんが、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の戻り値を介して行われます。
一部のコンパイラではvoidmainが許可されていますが、一貫性と単純さのために、ANSI規格ではmainの単一のプロトタイプが必要です。
int main(int argc, char *argv[]);
Cでは、引数は呼び出し元によってクリーンアップされるため、mainの作成者は、引数argcおよびargvの宣言または処理を怠ることができます。ただし、mainを呼び出すセットアップルーチンがintの戻り値を期待し、代わりに値が見つからない場合、動作は未定義になる可能性があります。
短い答え:
- mainの戻り値は、スクリプト作成に役立ちます。
- mainを呼び出すセットアップおよびクリーンアップルーチンには、使用するための一貫したインターフェイスが必要です。
主な変更理由
ボイドメイン(){}
に
int main() { }
それ以降のリリースでは、実行中にプログラムで発生したエラーを、それが実行されているオペレーティング システムに通知することでした。
return 0;
0 ではなく任意の数値が返された場合、正常に実行されたプログラムを識別します。これは、何らかのエラーが発生したことを意味し、そのエラー コードは main によって返されます。コードブロック IDEで実行している場合は、メインが 0 を返す場合にビルド ログを参照してください。通常は表示されます。
Process terminated with status 0
それ以外の場合は、エラーが発生したことを意味する赤でステータス コードが表示されます
ウィキペディアから:
EXIT_SUCCESS
main関数から返された値は、プロセスの終了ステータスになりますが、C標準では、 (従来はゼロ)との2つの値にのみ特定の意味が割り当てられていますEXIT_FAILURE
。他の可能な戻り値の意味は、実装によって定義されます。
Cの場合と同様に、プロセスによってOSに終了コードが与えられるためです。
あなたはどちらかを使うことができます
int main (int argc, char ** argv)
{
return (0);
}
また
int main (int argc, char ** argv)
{
exit (0);
}
これは少なくともC89IIRCにあります。
intはリターンコードであるため、プログラムはOSに戻ることができます。
この値を照会して、操作が成功したかどうかを確認できます。
これは、コマンドラインスクリプトを使用するときに非常に役立ちました。
プログラムを実行して、正常に実行されるかどうかを確認します。したがって、0 が返された場合は true で正常に実行されたことを意味し、1 が返された場合は正常に実行されておらず、このint
値はプログラムが正常に実行されたかどうかを OS に伝えます
main()
おそらく、メソッドからのステータス コードで正常に終了することが理にかなっているためです。Java では、これをエミュレートする必要がありますが、System.exit()
これはそれほど優雅ではありません。