如何解决MISRA代码中的“控制表达式不是‘本质上布尔’表达式”?

问题描述 投票:0回答:1

我有一个简单的宏函数,它将检查条件并返回一个布尔值。下面是代码片段

假设:

#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 发出警告“不是‘本质上布尔’表达式”?有什么建议可以修复此类警告吗?

c enums static-analysis boolean-expression misra
1个回答
0
投票

在您的分析器中,您应该能够指定自定义布尔类型,例如在PClint:

-strong(B,boolean) /* custom bool */

并将其定义为:

typedef uint8_t boolean;

我也更喜欢自定义 bool,因为在许多嵌入式库/HAL 中定义自己的 bool,这可能会导致冲突。

© www.soinside.com 2019 - 2024. All rights reserved.