c++的函数互相调用,不会一直循环,这个是为什么,请具体高手解释一下

2024-12-03 02:08:44
推荐回答(3个)
回答1:

说一下我的看法吧:
vc6.0里面很容易就能写出无限循环的程序。
但楼主这种情况不行。为什么呢?
像这种嵌套调用时,比如循环调用了A()6000次,在第6001次调用时,第一次调用的A函数并没有退出。一直保存在堆栈里面。不像一般函数那样执行玩了就注销掉了所用的内存。可以说,第6001次的A()也是由第一次的A()间接调用的

而且我们知道,控制台应用程序是仿dos的(当然,这样说并不准确)。它的栈空间一定是有个上限的。达到一定程度,程序就终止执行。

和下面这个无限循环程序比较下:运行后,输入a,回车。这是别人的一个提问的内容:
#include
using namespace std;

void main()
{
int x;
long y;
printf("请输入您本次要存入几个学生的信息,提示在0到30之间,输入为纯数字:");
scanf("%d",&x);
while(x>30||x<0)
{
printf("输入错误,请重新输入您本次要输入的学生信息的人数,在0到30之间:");
scanf("%d",&x);
}
}

这是个无限循环,他也许可以一直无限循环下去,但是他没有占用多少栈空间。所以程序不会停止。(我也没确定运行久了会不会停止)

回答2:

这确实是无限互相调用,但是你用的是VC++吧,VC会判断这是无限递归,之后就会自动终止程序,所以没有一直运行下去。

回答3:

栈空间不足(被用光了),程序被VC关掉了。
这个程序本身,从理论上来说,应该是无穷无尽的。