printf的执行在递归main函数中是不明确的

时间:2017-07-21 09:53:59

标签: c recursion printf

#include <stdio.h>
int main() {
  static int i = 5;
  if (--i) {
    main();
    printf("%d ", i);
  }
}

输出

0 0 0 0 

我想知道在这个程序中如何执行printf

2 个答案:

答案 0 :(得分:5)

嗯,i是静态的,意味着在{strong>所有调用main之间共享。

您永远不会在i降至0之前打印任何内容,并且由于i在打印时共享给所有来电,所有来电都会看到相同的值:{{1} }

  • 0
    • i=5 if(4) main()
      • i=4 if(4) main()
        • ....
          • i=3 if(2) main()现在。所有其他调用都将看到此值。 Resursions停止
        • i=0因为print 0是静态的
    • i因为print 0是静态的
  • i因为print 0是静态的

要了解我认为在递归调用之前打印的内容如下:

i

答案 1 :(得分:1)

您需要将printf("%d ",i);置于main()的内部呼叫之上。

你在这里冰凉:

  1. 如果遗失,则会在return 0;的末尾插入隐式main

  2. 您可以在C中自行呼叫main;在C ++中,行为是未定义的。