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++ 没有给我一个返回丢失的警告?

4

1 回答 1

7

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

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

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

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

无论如何,return 0;main().

于 2012-07-17T03:47:44.007 回答