C ++で「void main」ではなく「int main」を使用する必要があるのはなぜですか? [複製]
-
19-08-2019 - |
質問
この質問にはすでに回答があります:
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()
を使用してこれをエミュレートする必要がありますが、これはそれほど優雅ではありません。