gpt4 book ai didi

c - MISRA:有符号整数的按位运算

转载 作者:太空宇宙 更新时间:2023-11-04 06:33:07 28 4
gpt4 key购买 nike

根据 MISRA 规则,我遇到此错误:不能对有符号整数执行按位运算。

    typedef unsigned __int8   gUBYTE;

typedef gUBYTE gBORDER;
enum {
gbrLEFT = 0x01,
gbrTOP = 0x02,
gbrRIGHT = 0x04,
gbrBOTTOM = 0x08,
gbrALL = gbrLEFT | gbrTOP | gbrRIGHT | gbrBOTTOM
};

我该如何解决这个错误?

最佳答案

改变:

gbrALL      = gbrLEFT | gbrTOP | gbrRIGHT | gbrBOTTOM

到:

gbrALL      = gbrLEFT + gbrTOP + gbrRIGHT + gbrBOTTOM

这解决了这个特定表达式中的问题。在代码的后面,您可以使用 x & gbrLEFT 等表达式,这也可能被标记为对有符号整数的按位运算。但是,如果 xgUBYTE 类型,则它是无符号的。另一方面,它将被提升为一个 int,然后 x & gbrLEFT 在技术上是对有符号整数的操作。另一方面,这似乎是 MISRA 分析仪的问题;代码可能会对两个提升为有符号整数的无符号对象执行完全安全的按位运算,从而触发来自分析器的警告。因此,一个好的分析器似乎应该认识到底层对象对于按位操作是安全的。 (这适用于许多按位操作。如果应用于已提升为 int 的无符号对象,某些操作(例如 ~ 可能不安全,具体取决于 C 实现和其他上下文。)

是这样吗?如果是这样,那么修正上面显示的一个表达式可能就足够了。

关于c - MISRA:有符号整数的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18465552/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com