...
In this noncompliant code example, an assignment expression is the outermost expression in an if statement.:
| Code Block | ||||
|---|---|---|---|---|
| ||||
if (a = b) {
/* ... */
}
|
...
When the assignment of b to a is not intended, this conditional block is now executed when a is equal to b.:
| Code Block | ||||
|---|---|---|---|---|
| ||||
if (a == b) {
/* ... */
}
|
...
In this noncompliant example, the expression x = y is used as the controlling expression of the while statement.:
| Code Block | ||||
|---|---|---|---|---|
| ||||
do { /* ... */ } while ( foo(), x = y ) ; |
...
When the assignment of y to x is not intended, this conditional block is now executed when x is equal to y.:
| Code Block | ||||
|---|---|---|---|---|
| ||||
do { /* ... */ } while ( foo(), x == y ) ;
|
...
In this noncompliant example, the expression p = q is used as the controlling expression of the while statement.:
| Code Block | ||||
|---|---|---|---|---|
| ||||
do { /* ... */ } while ( x = y, p = q ) ; |
...
This is a compliant example because the expression x = y is not used as the controlling expression of the while statement.:
| Code Block | ||||
|---|---|---|---|---|
| ||||
do { /* ... */ } while ( x = y, p == q ) ;
|
...
In this compliant example, the expression x = y is itself a parameter to a comparison operation. :
| Code Block | ||||
|---|---|---|---|---|
| ||||
if ( ( x = y ) != 0 ) { /* ... */ } |
...
In this compliant example, the expression x = y is a single primary expression.:
| Code Block | ||||
|---|---|---|---|---|
| ||||
if ( ( x = y ) ) { /* ... */ } |
...
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
...
Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
Compass/ROSE |
|
| Could detect violations of this recommendation by identifying any assignment expression as the top-level expression in an | ||||||
| exprctxt | Fully implemented. | |||||||
GCC |
|
| Can detect violations of this recommendation when the | ||||||
| ASSIGCOND.GEN |
| |||||||
| 9 S |
| |||||||
| PRQA QA-C |
| 3314 | Partially implemented. |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
...