我发现这个问题非常有趣但有点虚幻。 问题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
谢谢
答案 0 :(得分:17)
如何在C ++中递归调用
main()
函数
这不合法。 C ++语言标准规定“函数main不得在程序中使用”(C ++11§3.6.1/ 3)。调用函数是“使用”的一种形式。
任何调用main()
的程序都会显示未定义的行为(从技术上讲,这样的程序格式不正确,因为违反的规则是可诊断的语义规则,但如果大多数编译器拒绝该程序,我会感到惊讶)。请注意,这不会阻止启动程序的运行时基础结构调用main()
函数。