...
EXP45-EX3: Assignment can be used in the above contexts if it occurs in a function argument or array index. In this compliant example, the expression x = y
is used in a function argument:
Code Block | ||||
---|---|---|---|---|
| ||||
if (foo(x = y)) { /* ... */ } |
This is a noncompliant example because &&
is not a comparison or relational operator and the entire expression is not primary:
Code Block | ||||
---|---|---|---|---|
| ||||
if ((v = w) && flag) { /* ... */ } |
When the assignment of v
to w
is not intended, this conditional block is now executed when v
is equal to w
:
Code Block | ||||
---|---|---|---|---|
| ||||
if ((v == w) && flag) { /* ... */ }; |
When the assignment is intended, the following is an alternative compliant solution:
Code Block | ||||
---|---|---|---|---|
| ||||
if (((v = w) != 0) && flag) { /* ... */ }; |
Risk Assessment
...
[Hatton 1995] | Section 2.7.2, "Errors of Omission and Addition" |
...