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

Amb*_*ika -2 c recursion printf

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

输出是

0 0 0 0 
Run Code Online (Sandbox Code Playgroud)

我想知道printf这个程序是如何执行的.

Dav*_*aro 5

嗯,i是静态意义,在所有调用之间共享main.

之前你从来没有打印任何东西,i下到0既然i是共享的,在打印的所有调用同一个值的点所有呼叫:0

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

在递归调用之前看看我认为你期望打印的内容如下:

int main() {
  static int i = 5;
   if (--i) {
    printf("%d ", i);
    main();
  }
}
Run Code Online (Sandbox Code Playgroud)