-5

代码:

for(int i=0;i<5;){
  i=i++;
  printf("%d",i);
}

上面的程序无限打印零,这怎么可能?有说法i=i++;。请解释为什么i不增加的值。

4

1 回答 1

5

该语句i = i++在 C 中是未定义的行为。简单地说,不保证在没有插入序列点的情况下修改和使用同一个对象以您期望的任何方式工作。

如果您对深入调查感兴趣,ISO C 标准的附录 C 中介绍了序列点。基本上,它们包括:

  • 在函数调用和实际调用中的函数指示符和实际参数的评估之间。
  • 在以下运算符的第一个和第二个操作数的计算之间:逻辑与&&;逻辑或||;逗号,
  • 在条件?:运算符的第一个操作数的计算与第二个和第三个操作数的计算之间。
  • 一个完整的声明器的结束。
  • 在完整表达式的评估和要评估的下一个完整表达式之间。以下是完整的表达式: 不属于复合文字一部分的初始化器;表达式语句中的表达式;选择语句(ifswitch)的控制表达式;whileordo语句的控制表达式;语句的每个(可选)表达式for;语句中的(可选)表达式return
  • 紧接在库函数返回之前。
  • 在与每个格式化输入/输出函数转换说明符关联的操作之后。
  • 在每次调用比较函数之前和之后,以及在对比较函数的任何调用与作为参数传递给该调用的对象的任何移动之间。
于 2020-08-05T08:40:59.380 回答