14

この質問は好奇心からです。テスト プログラムのメインを書いているときに、main(no returnstatement in main) から何も返されませんでした。しかし、私は main として宣言しましint main()た。そして、それは正常にコンパイルされました。

int戻り値の型で記述され、実際には を返さない他の関数があるかのintように、エラーが発生します

「関数名」は値を返す必要があります

では、なぜコンパイラはmain関数に対して同じことを訴えないのでしょうか?

4

2 に答える 2

5

C++ では、int main()戻り値なしでそのままにしておくことができ、その時点でデフォルトで 0 が返されます。

5.1.2.2.3 プログラムの終了

1 main 関数の戻り値の型が int と互換性のある型である場合、main 関数の最初の呼び出しからの戻りは、main 関数によって返された値を引数として exit 関数を呼び出すことと同等です。11) } に到達します。 main 関数を終了する は値 0 を返します。戻り値の型が int と互換性がない場合、ホスト環境に返される終了ステータスは規定されていません。

しかし、 からの戻りにはEXIT_SUCCESSまたはを使用した方がよいはずです 。EXIT_FAILUREmain()

int を返している場合でも、一部の OS (Windows) は戻り値を 1 バイト (0-255) に切り捨てます。おそらく他のほとんどのオペレーティング システムと同様に、Unix も同じことを行います。

GNU ライブラリからの引用

一部の非 POSIX システムでは、終了ステータス値に異なる規則を使用しています。移植性を高めるために、マクロ EXIT_SUCCESS および EXIT_FAILURE を、それぞれ成功および失敗の従来のステータス値に使用できます。これらはファイル stdlib.h で宣言されています。

— マクロ: int EXIT_SUCCESS このマクロを exit 関数と一緒に使用して、プログラムの正常終了を示すことができます。

POSIX システムでは、このマクロの値は 0 です。他のシステムでは、値は他の (定数でない可能性がある) 整数式である可能性があります。

— マクロ: int EXIT_FAILURE このマクロを exit 関数と共に使用して、一般的な意味でのプログラムの完了の失敗を示すことができます。

POSIX システムでは、このマクロの値は 1 です。他のシステムでは、値は他の (定数でない可能性がある) 整数式である可能性があります。その他のゼロ以外のステータス値も失敗を示します。特定のプログラムは、さまざまな非ゼロのステータス値を使用して、特定の種類の「失敗」を示します。たとえば、diff はステータス値 1 を使用してファイルが異なることを意味し、2 以上の場合はファイルを開くのに問題があったことを意味します。

于 2013-10-10T10:55:14.593 に答える