C中布尔表达式的结果

时间:2012-05-12 23:03:57

标签: c boolean-expression pre-increment

为什么以下表达式的计算结果为0?

i > --i

假设i = 5.从左到右评估表达式,我们评估左操作数(i)得到5,我们评估右操作数(--i)得到4.所以表达式约应该计算为1但是当我用gcc编译它并运行它时,它总是计算为0.我的思维过程中是否存在缺陷?

1 个答案:

答案 0 :(得分:11)

它只是未定义的行为,因为您正在修改i的值以及在没有插入序列点的情况下读取它。关系运算符< 引入序列点。

从C11,6.5(2):

  

如果对标量对象的副作用相对于同一标量对象的不同副作用或使用相同标量值的值计算未被排序   对象,行为未定义。