[英]CppCheck warning: expression depends on order of evaluation in x = x |= (1 << 3)
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++
相同或不同的重复。
两次修改相同值的表达式是不需要允许的可憎行为(或者在任何情况下,不需要明确定义,即我们不必找出说出他们做什么的方式,以及编译器不必支持它们)。
C标准并不强制要求任何关于这些类型的表达式的内容,因此在所有环境中都没有特定的评估顺序。
就副作用(对x的修改)而言, x = x |= 1
几乎等于x = x += 1
。 x = x += 1
相当于C中的x = ++x
。该表达式是一个众所周知的未定义表达式 。
阅读更多相关信息[这里]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.