以下代码使用代码块将输出输出为 0 0 0 0。
int main()
{
static int i=5;
if(--i){
main();
printf("%d ",i);
}
}
我完全理解上面的代码是如何执行的。然而,当我从代码中删除“static”并使用 int i = 5 时,Ideone.com(在线编译器)给了我运行时错误,而 Codeblocks(使用 GCC)没有给我任何东西 - 甚至终端也没有弹出。
我还尝试将声明部分放在 main 之外,即 static int i;然后在 main 中,我给出了 i = 5;。尽管如此,我还是收到了上述错误。我不知道发生了什么事。任何帮助将不胜感激。
PS:该程序是在网站上找到的,但没有给出任何解释。
最佳答案
如果您删除静态,则每次对 main 的调用都会获得自己的 i 副本,并初始化为 5,因此您的递归永远不会终止。
关于c - main() 递归的不可预测的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25532515/