主C ++上的递归调用

时间:2012-07-05 17:33:26

标签: c++

  

可能重复:
  Can main function call itself in C++?

我发现这个问题非常有趣但有点虚幻。 问题6.42 C ++如何通过Dietel编程“可以在你的系统上主要调用主程序吗?编写一个包含函数main的程序。包括静态局部变量计数并初始化为1.每次调用main时,后递增并打印计数值编译你的程序。会发生什么?

我编写的程序如下,但我在10次之后停止递归,好像我要保持它运行它将停止在41000左右的值。

我的问题:如果在c ++中调用递归主函数,如果执行此程序以堆栈溢出流或内存错误等,该怎么合法?请解释一下。

#include <iostream>
using namespace std;
int main()
{
       static int count = 0;
       count++;
       if(count <= 10) {
                cout << count << endl;
                return main(); //call main
                }//end if

       system("pause");
       return 0;//successful completion
}//end main

谢谢

1 个答案:

答案 0 :(得分:17)

  

如何在C ++中递归调用main()函数

这不合法。 C ++语言标准规定“函数main不得在程序中使用”(C ++11§3.6.1/ 3)。调用函数是“使用”的一种形式。

任何调用main()的程序都会显示未定义的行为(从技术上讲,这样的程序格式不正确,因为违反的规则是可诊断的语义规则,但如果大多数编译器拒绝该程序,我会感到惊讶)。请注意,这不会阻止启动程序的运行时基础结构调用main()函数。