重复调用主要function的意外输出

我正在执行一个用C编写的代码,它给出了意想不到的结果,我无法弄明白。 为什么我打印五次的价值?

以下是代码:

#include  void main() { static int i = 0; static int count =0; if (i<5){ i++; main(); printf("%d\n",i); ++count; printf("%d\n",count); } } 

这是输出:

 5 1 5 2 5 3 5 4 5 5 

输出没有问题。

  • 首先设置i = 0。
  • 第一个if(i <5)通过,所以我正在递增(注意:i ++表示我仍然是4,但是当它下次使用时,该值为5)。
  • 调用main,静态变量i和count保持它们的值作为静态变量不被覆盖,这样程序通过if(i <5)直到i = 5,然后if(i <5)返回false和第五次调用到了主要目的突然。
  • 因为在第五次调用main时没有发生任何事情,i的值现在仍然是4,但是由于你通过i ++递增i,我在printf()中现在是5,因为这是我在增量后首先使用的时间。 Printf显示:

     5 
  • count通过++ count递增(++ count表示值立即递增,因此count现在为1)。 Printf显示:

     1 
  • 现在递归循环结束。 对于每个“级别”的线

     main(); 

    完成调用,所以下一行是

     printf("%d\n", i); 

    因为我们永远不会改变i的值(因为对于所有“级别”我们已经将i增加到5),控制台向我们显示变量i的5倍值。

  • 我们唯一仍然改变的是变量计数。 由于在递归调用main之后变量计数仍在递增,因此count仍然加起来为5.因此输出如下所示:

     5 (i, level 5) 1 (count, level 5) 5 (i, level 4) 2 (count, level 4) 5 (i, level 3) 3 (count, level 3) 5 (i, level 2) 4 (count, level 2) 5 (i, level 1) 5 (count, level 1) 
  • 当计数达到5时,我们再次达到递归调用堆栈的“顶层”级别,程序结束。