繁体   English   中英

CppCheck警告:表达式取决于x = x | =(1 << 3)中的评估顺序

[英]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++相同或不同的重复。

@Cornstalks 关于序列点链接引用了这一点。

两次修改相同值的表达式是不需要允许的可憎行为(或者在任何情况下,不需要明确定义,即我们不必找出说出他们做什么的方式,以及编译器不必支持它们)。

C标准并不强制要求任何关于这些类型的表达式的内容,因此在所有环境中都没有特定的评估顺序。

一个相当快速和简单的解释:

就副作用(对x的修改)而言, x = x |= 1几乎等于x = x += 1 x = x += 1相当于C中的x = ++x 。该表达式是一个众所周知的未定义表达式

阅读更多相关信息[这里]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM