C中布尔表达式的结果

Jel*_*alF 1 c boolean-expression pre-increment

为什么以下表达式求值为0?

i > --i
Run Code Online (Sandbox Code Playgroud)

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

Ker*_* SB 11

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

从C11,6.5(2):

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

  • @BinyaminSharet不,C没有指定子表达式中的evalation顺序.你不知道左边(那是`i> --i`中最左边的`i`是先评估,还是先评估`>`的右边. (2认同)