0
uint8 config;    
#define ELEM1 1U

void test1(void)
{
    /*Check Bit 0 of Configuration*/
    if((config) == 2 && (config) == 4)
    {
        arr[ELEM1].status[0]          = 0x00;
    }

}

我需要试试吗

1)

if(((config) == 2) && ((config) == 4))
if((Boolean)((config) == 2) && ((config) == 4))

经过上述更改后,我现在观察到错误:

条件表达式应该具有本质上的布尔类型 [MISRA 2012 规则 14.4,必需]

4

1 回答 1

3

首先,config不能现实地立即拥有价值24现在可以吗?所以你可能打算使用||. 还是按位&计算?

至于警告,如果您在同一个表达式中混合多个运算符,MISRA-C 要求您在子表达式周围添加括号。符合 MISRA 的代码将是:

if( (config==2) || (config==4) )

etc 运算符的结果&& ||本质上是布尔值,因此无需强制转换。

于 2020-12-16T10:16:21.800 回答