【发布时间】:2016-05-26 14:25:02
【问题描述】:
C 中的代码行是
x = x |= (1 << 3);
给出 cppCheck 错误:“表达式 'x=x|=1' 取决于副作用的评估顺序”
而线
x |= (1 << 3);
没问题。
我想
x = x |= (1 << 3);
应该是一样的
x = x = x | (1 << 3);
这只是
x = (x = (x | (1 << 3)));
实际上对 x 的外部赋值没有效果,这意味着结果与
x |= (1 << 3);
那么 CppCheck 到底在抱怨什么?
编辑:认为它与j = j++ 与上述问题中讨论的j++ 相同或不同的原因重复。
【问题讨论】:
-
您可能想阅读sequence points。在单个序列点内修改变量两次是未定义的行为。
标签: c evaluation side-effects cppcheck