无法理解C程序的输出

gui*_*eek 1 c output

C中有这个代码

int fun()
{
  static int num = 40;
  return num--;
}

int main()
{
  for(fun(); fun(); fun())
  {
    printf("%d ", fun());
  }
  getchar();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出结果如下:38 35 32 29 26 23 20 17 14 11 8 5 2

我无法弄清楚为什么程序不会继续打印超出2.即在底片中.不应该继续打印... -1 -4 -7 ....无限循环任何人都可以解释一下吗?

Tom*_*ech 5

fun()正在评估0这里:

for(fun(); fun(); fun())
//         ^    
Run Code Online (Sandbox Code Playgroud)

0falseC中的等价物,所以循环正在退出.

代码依赖于num - 13的倍数这一事实,如fun()在循环开始时评估一次,然后在每个循环中评估3次.例如,如果您将定义更改为

static int num = 41;
Run Code Online (Sandbox Code Playgroud)

fun()将返回0错误的地方,你的循环将继续进入负数.