控制条件应为 bool 型表达式
10.1.9 ID_nonBoolCondition
    
  如果控制条件均为 bool 型表达式,可使逻辑结构更清晰,有效避免隐式类型转换造成的问题。
示例:
void foo(int* p, size_t n, bool b)
{
    if (p) {     // Non-compliant
        ....
    }
    if (n) {     // Non-compliant
        ....
    }
    if (b) {     // Compliant
        ....
    }
}
例中 p 和 n 不应直接作为条件,b 为 bool 型,可直接作为条件。
应改为:
void foo(int* p, size_t n, bool b)
{
    if (p != NULL) {   // Compliant
        ....
    }
    if (n != 0) {      // Compliant
        ....
    }
    ....
}
循环条件、三元表达式的条件等所有可作为控制条件的表达式均受本规则限制。
例外:
if (int* p = bar()) {  // Let it go
    ....
}
C++03 允许将声明作为条件,这种情况可不受本规则限制。
相关
参考
MISRA C 2012 14.4
MISRA C++ 2008 5-0-13
MISRA C++ 2008 5-0-14
SEI CERT EXP20-C