gcc/g ++对空主函数给出不同的响应

Sco*_*ter 0 c c++ gcc return g++

我正在使用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[])
{

}
Run Code Online (Sandbox Code Playgroud)

并编译它g++ -Wall test_warnings.cpp我没有得到任何警告.

如果我编译它,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]
Run Code Online (Sandbox Code Playgroud)

如果使用-Wreturn-type代替-Wall,则会出现相同的行为.

为什么g ++没有给我一个警告,说明缺少回报?

Kei*_*son 7

因为C和C++是不同的语言.

在C++中,在main()不执行return语句的情况下到达结尾等同于执行return 0;.

在C中,从1990年的ISO标准开始,从结束时main()退回到调用环境的未定义状态.

C99改变了这一点,基本上采用了C++规则 - 但是gcc默认不实现C99.(尝试编译-std=c99.)

在任何情况下,添加一个return 0;语句到最后都不会有害main().