主C++上的递归调用

Sin*_*nan 7 c++

可能重复:
主函数可以在C++中调用自身吗?

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

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

我的问题:在c ++中调用递归main函数是如何合法的,如果这个程序被执行到堆栈溢出或内存故障等等.请解释.

#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
Run Code Online (Sandbox Code Playgroud)

谢谢

Jam*_*lis 17

如何main()在C++中递归调用函数是合法的

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

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

  • @Sinan:未定义的行为是从编译器供应商那里获得的无监狱卡.这意味着供应商可以自由地做任何他们想做的事情并且仍然符合标准.许多供应商为其C和C++编译器使用通用框架.C标准要求供应商提供递归调用`main`的能力.最简单的方法是将该功能扩展到C++.C++标准没问题.因此,在C++中以递归方式调用main可能会在您的计算机上使用您的编译器.这并不意味着当你切换计算机/交换机编译器时它会工作. (4认同)
  • 我认为从§5.2.2[expr.call]/9开始引用更易读的,但不太常见的"递归调用是允许的,除了名为main的函数"之外也是有帮助的. (3认同)