c - 无法理解 C 程序的输出

标签 c output

C 中有这段代码

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

int main()
{
  for(fun(); fun(); fun())
  {
    printf("%d ", fun());
  }
  getchar();
  return 0;
}

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

我无法弄清楚为什么程序不继续打印超过 2。即在负数中。它不应该继续打印 ... -1 -4 -7 ....无限循环可以吗有人解释一下吗?

最佳答案

fun() 在此处计算为 0:

for(fun(); fun(); fun())
//         ^    

0 等同于 C 中的 false,因此循环正在退出。

代码依赖于 num - 1 是 3 的倍数这一事实,因为 fun() 在循环开始时计算一次,然后计算 3 次每个循环。例如,如果您将定义更改为

static int num = 41;

fun() 会在错误的地方返回 0,您的循环会继续进入负数。

关于c - 无法理解 C 程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24935463/

相关文章:

c - 为什么第一个 sbrk 的返回值与后续调用不同?

c++ - output objdump -t的输出中的 ".hidden"是什么意思?

c - 将包含空格的文件中的数字加载到二维整数数组

c++ - 场景输出在第二次循环时给出错误答案

c++ - VB换行转义字符?

scala - 通过键Spark写入多个输出-一个Spark作业

c - 声明时初始化匿名 union 内的字段

c - C中的指针转换代码是什么意思

c - 为什么三种情况下的输出相同?

python - 输出中的括号和引号