控制条件应为 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