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

gcc/g++ are giving different response to empty main function

本文关键字:响应 g++ gcc 函数      更新时间:2023-10-16

我正在使用g++(Ubuntu/Linaro 4.6.1-9ubuntu3)4.6.1gcc(Ubuntu/Linaro 4.6.1-9ubuntu3)4.6.1

如果我制作一个只包含的cpp和c文件

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

并用CCD_ 1编译,我没有得到任何警告。

如果我用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]

如果使用-Rewesturn类型而不是-Wall,则会表现出相同的行为。

为什么g++没有给我一个返回丢失的警告?

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

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

在C中,从1990年ISO标准开始,从main()的末尾脱落会向调用环境返回未定义状态。

C99改变了这一点,本质上采用了C++规则——但gcc默认情况下不实现C99。(尝试使用-std=c99进行编译。)

在任何情况下,在main()的末尾添加一个return 0;语句都没有坏处。