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

&&、|| 的子表达式应为后缀表达式

10.1.11 ID_nonPostfixSubCondition
目录 › next › previous

如果 &&、|| 的子表达式均为后缀表达式,可使逻辑结构更清晰,有效避免各种优先级问题。

后缀表达式(postfix-expression)是 C/C++ 语言的文法概念,也是一类表达式的总称:

  • 只包含标识符或常量的表达式
  • 用小括号括起来的表达式
  • 用于数组元素求值的 [ ] 表达式
  • 函数调用、函数式类型转换表达式
  • .、-> 表达式
  • 后置 ++、-- 表达式
  • typeid 等表达式

本规则意在强调子表达式应适当地用括号括起来,以便提高可读性,并确保程序的行为符合开发者的意图。

示例(设 a、b、c 为 bool 型变量,n 为整型变量):

if (n == 0 && b) {   // Non-compliant
    ....
}

例中 n == 0 不是后缀表达式,应使用括号括起来:

if ((n == 0) && b) {   // Compliant
    ....
}

又如:

if (a || b && c) {   // Non-compliant
    ....
}

即使知道 && 的优先级高于 ||,也应使用括号将 || 的子表达式括起来,如:

if (a || (b && c)) {   // Compliant
    ....
}

例外:

if (a || b || c)) {   // Compliant
    ....
}

当 &&、|| 的子表达式运算符与其相同时,可不受本规则约束。

依据

ISO/IEC 9899:1999 6.5.2(1) ISO/IEC 9899:2011 6.5.2(1) ISO/IEC 14882:2003 5.2(1) ISO/IEC 14882:2011 5.2(1)

参考

MISRA C++ 2008 5-2-1
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.