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

禁用逗号表达式

10.10.4 ID_forbidCommaExpression
目录 › next › previous

逗号表达式将多个语句合成一个表达式,不利于阅读且易形成笔误。

示例:

fun1(), fun2();                     // Non-compliant, bad
cond? foo(), bar(): baz(), qux();   // Non-compliant, very bad

逗号表达式会使代码的静态结构含混不明,总有更合理的方法替代逗号表达式:

fun1();
fun2();      // Compliant

if (cond) {
    foo();
    bar();   // Compliant
} else {
    baz();
    qux();   // Compliant
}

逗号表达式也易被误用,如:

a = b++, b * 2;      // Non-compliant
x, y, z = 1, 2, 3;   // Non-compliant
delete p, q;         // Non-compliant
foo((a, b), c);      // Non-compliant
return i, j, k;      // Non-compliant

又如:

for (a = 0, b = 0; a < 100; a++, b++)  {   // Let it go?
    ....
}

在 for 语句的第 1 个和第 3 个表达式中使用逗号表达式为惯用方式,但这种方式并不值得提倡,审计工具不妨通过配置决定是否放过这种方式。

配置

allowCommaExpressionInForIteration: 是否放过 for 语句中的逗号表达式

参考

MISRA C 2004 12.10 MISRA C 2012 12.3 MISRA C++ 2008 5-18-1
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.