主要的递归

时间:2012-08-25 14:24:30

标签: c++ recursion

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

#include<iostream>
using namespace std;

int i=10;

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

2 个答案:

答案 0 :(得分:11)

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

C ++ 03 3.6.1

  

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

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

答案 1 :(得分:0)

代码无效,需要符合条件的编译器才能发出诊断信息。完成之后,编译器可以自由地执行任何操作,包括生成可运行的可执行文件,并执行类似于您期望的操作。

请注意,g ++似乎不会发出诊断信息,但EDG编译器(通过在线联机)可以发布。