gpt4 book ai didi

c - 如何解决有关对基础类型应用按位运算符 ~ 和 << 的 Misra 警告

转载 作者:行者123 更新时间:2023-11-30 19:04:52 24 4
gpt4 key购买 nike

我有以下声明

CAN0_CTL_R &= ~ CAN_CTL_INIT;

以及所需的 Misra 警告:

If the bitwise operators ~ and << are applied to an operand of underlying type unsigned char or unsigned short, the result shall be immediately cast to the underlying type of the operand

寄存器定义如下:

#define CAN_CTL_INIT            0x00000001U  // Initialization
#define CAN0_CTL_R (*((volatile uint32_t *)0x40040000U))

由于没有 Short 或 char 数据类型,是什么导致了警告?

最佳答案

据我所知,鉴于您所说的宏定义适用,该警告不适用于您提供的语句。不过,我推测它与整数常量 0x00000001U 有关。解释为整数常量,具有 unsigned int 类型,但 MISRA 工具可能会将其误解为具有较窄的类型,因为它的值适合较窄的类型。

我建议通过明确指定类型来减少机器或人类误解的可能性:

#define CAN_CTL_INIT            ((unsigned int) 0x00000001U)  // Initialization

#define CAN_CTL_INIT            ((uint32_t) 0x00000001U)  // Initialization

。前者在每个符合标准的 C 实现上生成与原始表达式相同类型和值的表达式。后者可能对您来说是等效的,并且您可能在风格上更喜欢它。 (如果后者恰好对你来说是等价的,那么你应该考虑它是否真的是你想要的。)

关于c - 如何解决有关对基础类型应用按位运算符 ~ 和 << 的 Misra 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50988840/

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