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

赋值表达式不应作为子表达式

10.4.5 ID_assignmentAsSubExpression
目录 › next › previous

赋值及复合赋值表达式作为子表达式可读性较差,易产生求值顺序或运算符优先级相关的问题。

示例(设 a、b、c 为变量):

a = b;    // Compliant
a += b;   // Compliant

a += b += c;     // Non-compliant
fun(a = b, c);   // Non-compliant

if (a = b) {   // Non-compliant
    ....
}
switch (a = b) {   // Non-compliant
    ....
}
while (a = b) {   // Non-compliant
    ....
}
for (; a = b; ) {   // Non-compliant
    ....
}
do {
    ....
} while (a = b);   // Non-compliant

赋值表达式的值被使用,或作为控制语句的条件是不符合要求的。

连续赋值是一种惯用方式,但不值得提倡,如:

a = b = c;   // Let it go?

审计工具不妨通过配置决定是否放过这种方式。

配置

allowSuccessiveAssignment: 是否允许连续赋值

相关

ID_if_assignment ID_while_assignment

参考

CWE-481 MISRA C 2004 13.1 MISRA C 2012 13.4 MISRA C++ 2008 6-2-1
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.