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