"Expression Used in the condition always yields the same result" C 中的警告

"Expression Used in the condition always yields the same result" warning in C

我想知道 Expression Used in the condition always yields the same result Misra 警告的确切含义。这是我正在使用的代码。

#define bool_new_timer_val    (Time_cnt < 4sec)

if( (bool_new_timer_val == True) ||
    (mystruct.bool_u8_status1 != 0x0) ||
    ((mystruct.bool_u8_status1 == 0x0) && (bool_old_timer == True)) ||
    (mystruct.bool_u8_status2 == True) ||
    (mystruct.bool_u8_status3 == True))
{
   // update the logic
}

虽然 运行 Misra,但我收到 Expression 'mystruct.bool_u8_status1' used in the condition always yields the same result 的警告。 问题指向行 ((mystruct.bool_u8_status1 == 0x0) && (bool_old_timer == True))

我想知道这个警告是什么意思。我的猜测是值 mystruct.bool_u8_status1 总是设置为 0x0。这是正确的理解吗?有什么建议吗?

查看您的代码:

(mystruct.bool_u8_status1 != 0x0) ||
((mystruct.bool_u8_status1 == 0x0) && (bool_old_timer == True)) ||

如果 mystruct.bool_u8_status1 != 0x0 的计算结果为 TRUE,则不计算第二行。

如果 mystruct.bool_u8_status1 != 0x0 的计算结果为 FALSE,则代码等同于

(FALSE) ||
((TRUE) && (bool_old_timer == True)) ||

这到底就是

((bool_old_timer == True)) ||

所以尝试编写如下代码:

(mystruct.bool_u8_status1 != 0x0) ||
(bool_old_timer == True) ||