0

g++ (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 を使用しています。

のみを含むcppおよびcファイルを作成すると

int main(const int argc, const char *const argv[])
{

}

g++ -Wall test_warnings.cppI get no warningでコンパイルします。

でコンパイルすると、gcc -Wall test_warnings.c予想される警告が表示されます。

test_warnings.c: In function ‘main’:
test_warnings.c:4:1: warning: control reaches end of non-void function [-Wreturn-type]

-Wall の代わりに -Wreturn-type を使用すると、同じ動作が発生します。

戻り値が見つからないという警告が g++ から出ないのはなぜですか?

4

1 に答える 1

7

C と C++ は別の言語だからです。

C++ では、ステートメントmain()を実行せずに の最後に到達することは、 を実行することと同じです。returnreturn 0;

C では、1990 年の ISO 標準の時点で、末尾から外れるmain()と、呼び出し元の環境に未定義のステータスが返されます。

C99 はこれを変更し、基本的に C++ ルールを採用しましたが、gcc はデフォルトで C99 を実装していません。(でコンパイルしてみてください-std=c99。)

いずれにせよ、return 0;の最後にステートメントを追加しても害はありませんmain()

于 2012-07-17T03:47:44.007 に答える