1

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

i > --i

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

4

1 回答 1

11

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

从 C11, 6.5(2) 开始:

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

于 2012-05-12T23:05:44.240 回答