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 ++没有给我一个警告,说明缺少回报?
因为C和C++是不同的语言.
在C++中,在main()
不执行return
语句的情况下到达结尾等同于执行return 0;
.
在C中,从1990年的ISO标准开始,从结束时main()
退回到调用环境的未定义状态.
C99改变了这一点,基本上采用了C++规则 - 但是gcc默认不实现C99.(尝试编译-std=c99
.)
在任何情况下,添加一个return 0;
语句到最后都不会有害main()
.