CERT.EXPR.PARENS

应将运算符在表达式中的优先级设置为显式。

漏洞与风险

与优先级规则有关的错误可能会导致以意外的方式评估表达式,从而可能会导致意外的行为。

缓解与预防

适当地使用括号可减少错误。

漏洞代码示例

复制
   unsigned int test(unsigned int m, unsigned int n, unsigned int o)
   {
      unsigned int a;
      a = m == n | o ? o : n;
      o = m * n + a;
      return o;
   }

在此不符合要求的示例中,Klocwork 在第 4 和 5 行报告了 CERT.EXPR.PARENS 缺陷,因为代码没有向运算符添加括号以表示优先级。此代码可能会导致意外的行为。

修正代码示例

复制
   unsigned int test(unsigned int m, unsigned int n, unsigned int o)
   {
      unsigned int a;
      a = (m == n) | o ? o : n;
      o = (m * n) + a;
      return o;
   }

以上示例符合要求,因为它使用括号来正确表示优先级。

相关检查器

  • MISRA.EXPR.PARENS.2012

外部指导