我正在使用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.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]
如果使用-Wreturn-type代替-Wall,则会出现相同的行为 .
为什么g不给我一个警告,说明缺少回报?
1 回答
因为C和C是不同的语言 .
在C中,在不执行
return
语句的情况下到达main()
的末尾相当于执行return 0;
.在C中,从1990 ISO标准开始,从
main()
结束时,返回未调整状态到调用环境 .C99改变了这一点,基本上采用了C规则 - 但是gcc默认不实现C99 . (尝试使用
-std=c99
进行编译 . )在任何情况下,将
return 0;
语句添加到main()
的末尾都不会有什么坏处 .