Posts: 1
Threads: 1
Joined: Apr 2016
Reputation:
0
Does the following expression comply with Rule 13.2?
(x = a) && (x = b)
What if it is preceded by the following declaration?
int a = 0;
Thanks,
rCs
<t></t>
Posts: 117
Threads: 25
Joined: Apr 2016
Reputation:
0
Not an official answer, but this construct is highly suspicious, because the result of the assignment is used as boolean (MISRA C 2012 10.1 and 13.4).
<t></t>
Posts: 632
Threads: 18
Joined: Jan 2006
Reputation:
1
The amplification of rule 13.2 states that no object shall be modified more than once within a full expression. Therefore the code "(x = a) && (x = b)" will violate rule 13.2.
The rule does not take into account the possible values that an object might take. The initialisation of a to 0 before this line does not effect the compliance of the expression with this rule.
The expression does violate rules 10.1 (assuming int x), 13.4 and 13.5.
If the expression is preceded by "int a = 0;" the code will also violate rule 2.1. Rule 14.3 will be violated if the expression is used within a controlling expression.
Posted by and on behalf of the MISRA C Working Group