Assignments within conditions are hard to spot and therefore make the code less readable. Moreover it often can be a typo and the comparison
(==) was intended instead. Ideally, conditions should not have side-effects.
Noncompliant Code Example
if ((str = cont.substring(pos1, pos2)) != '') { // Noncompliant
//...
}
Compliant Solution
str = cont.substring(pos1, pos2);
if (str != '') {
//...
}
See
- MISRA C:2004, 13.1 - Assignment operators shall not be used in expressions that yield a Boolean value
- MISRA C++:2008, 6-2-1 - Assignment operators shall not be used in sub-expressions
- MISRA C:2012, 13.4 - The result of an assignment operator should not be used
- MITRE, CWE-481 - Assigning instead of Comparing
- CERT, EXP45-C. - Do not perform assignments in selection statements
- CERT, EXP51-J. - Do not perform assignments in conditional expressions