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 ....无限循环任何人都可以解释一下吗?
fun()正在评估0这里:
for(fun(); fun(); fun())
// ^
Run Code Online (Sandbox Code Playgroud)
0是falseC中的等价物,所以循环正在退出.
代码依赖于num - 13的倍数这一事实,如fun()在循环开始时评估一次,然后在每个循环中评估3次.例如,如果您将定义更改为
static int num = 41;
Run Code Online (Sandbox Code Playgroud)
fun()将返回0错误的地方,你的循环将继续进入负数.