首页 文章

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

提问于
浏览
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.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 回答

  • 7

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

    在C中,在不执行 return 语句的情况下到达 main() 的末尾相当于执行 return 0; .

    在C中,从1990 ISO标准开始,从 main() 结束时,返回未调整状态到调用环境 .

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

    在任何情况下,将 return 0; 语句添加到 main() 的末尾都不会有什么坏处 .

相关问题