【发布时间】:2017-05-23 10:00:52
【问题描述】:
以下行会产生 misra 违规行为。
unsigned int u16_a;
unsigned char u8_b;
if (u16_a && u8_b) // Generates Misra-C 10.1 violation.
(u16_a) ? 2 : 1 //Generates Misra-C 10.1 violation.
违规说明操作数是必要的有符号类型,但应该是布尔类型。
对于第一次违规,如果我将它们强制转换为 _Bool 类型,它不会导致溢出,因为我记得 bool 数据类型的大小是 1 字节。
对于第二次违规尝试了这个:
(u16_a == 0)? 1 :2 // does this work
我在处理 MISRA 违规行为方面非常陌生,并且对大多数违规行为感到困惑。 提前致谢。
【问题讨论】:
-
u16_a和u8_a有哪些类型? -
对不起,将编辑问题。 u16_a 指 unsigned int_16 , u8_a 指 unsigned char
-
你能把它们声明为_Bool吗?
-
您不能将 转换为
_Bool,因为_Bool假定 true = 值 1。