☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

逻辑表达式及逻辑子表达式不应为常量

10.1.5 ID_constLogicExpression
目录 › next › previous

对不改变程序流程的常量表达式进行逻辑判断是没有意义的。

示例:

if (false) {  // Non-compliant
    ....
}

while (true || condition) {  // Non-compliant
    ....
}

这种代码会使相应的控制语句或控制条件失效,往往是调试或维护过程中产生的残留代码,应及时去除。

又如:

int* fun();

if (fun == NULL) {  // Non-compliant
    ....
}

函数地址、非动态创建的对象地址不会为空,这种地址与空指针比较往往意味着笔误。

例外:

while (true) {  // Compliant
    ....
}

do {
    ....
} while (0);  // Compliant

true 或 1 可作为 while 或 do-while 循环的条件,false 或 0 可作为 do-while 循环的条件。

constexpr if 语句的常量条件表达式用于编译期分枝控制,也不受本规则约束:

if constexpr (E) {  // Compliant
    ....
}

其中 E 为常量表达式。

相关

ID_invalidCondition

参考

CWE-570 CWE-571 MISRA C 2004 13.7 MISRA C 2012 14.3 MISRA C++ 2008 0-1-2 SEI CERT EXP16-C
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.