4

我读了一些在 C++ 中不允许 main() 递归的地方,但是当我尝试它运行时没有任何错误

#include<iostream>
using namespace std;

int i=10;

int main()
{
    if(i==1)
    {
        cout<<i;
        return 0;
    }
    i--;
    main();
}
4

2 回答 2

11

显式调用main是未定义的行为,任何事情都可能发生(包括似乎有效)。

C++03 3.6.1

3) main 函数不得在程序中使用。[...]

编译器(正如所有未定义的行为一样)不需要提供诊断,也不需要运行时崩溃。

于 2012-08-25T14:25:28.000 回答
0

代码无效,需要符合要求的编译器才能发出诊断。这样做之后,编译器就可以自由地做任何事情,包括生成一个可执行文件,该文件可以运行并执行您期望它执行的操作。

请注意,g++ 似乎没有发出诊断,但 EDG 编译器(通过 comeau online)会发出。

于 2012-08-25T15:12:06.083 回答