禁用逗号表达式
10.10.4 ID_forbidCommaExpression
逗号表达式将多个语句合成一个表达式,不利于阅读且易形成笔误。
示例:
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