!、&&、|| 的子表达式应为 bool 型表达式
10.1.10 ID_nonBoolSubCondition
如果 !、&&、|| 的子表达式均为 bool 型表达式,可使逻辑结构更清晰,有效避免隐式类型转换或运算符误用造成的问题。
示例(设 p 为指针,a、b、c 为整型变量):
if (!p) // Non-compliant
if (a && b) // Non-compliant
if (a || (b + c)) // Non-compliant
应改为:
if (p == NULL) // Compliant
if ((a != 0) && (b != 0)) // Compliant
if ((a != 0) || (b + c != 0)) // Compliant
相关
参考
MISRA C++ 2008 5-3-1
SEI CERT EXP20-C