我有一个简单的宏函数,它将检查条件并返回一个布尔值。下面是代码片段
假设:
#define boolean bool
测试.h文件
#define CHECK_STATE(X) (boolean)(STATE_VALUE == (uint8)(X) )
测试.c文件
enum MY_STATE{
STATE_0,
STATE_1,
STATE_2
};
static uint8 STATE_VALUE = (uint8)STATE_0; //This value update in the code dynamically from state 0 to 2
if(CHECK_STATE(STATE_1)) /*MISRA warning: Controlling expression is not an 'essentially Boolean' expression. */
{
/*If condition pass*/
}
else
{
/*If condition failes*/
}
在上面的代码中
CHECK_STATE
函数将返回一个布尔值。所以 if 循环可以检查 true 或 false。那么为什么 MISRA 发出警告“不是‘本质上布尔’表达式”?有什么建议可以修复此类警告吗?
在您的分析器中,您应该能够指定自定义布尔类型,例如在PClint:
-strong(B,boolean) /* custom bool */
并将其定义为:
typedef uint8_t boolean;
我也更喜欢自定义 bool,因为在许多嵌入式库/HAL 中定义自己的 bool,这可能会导致冲突。