MISRAC++2008-5-0-1_a
Synopsis
(Required) The value of an expression shall be the same under any order of evaluation that the standard permits.
Enabled by default
Yes
Severity/Certainty
Medium/High

Full description
There are expressions that depend on the order of evaluation. This check is identical to MISRAC2004-12.2_a, MISRAC2012-Rule-1.3_i, MISRAC2012-Rule-13.2_a, SPC-order, CERT-EXP30-C_a.
Coding standards
- CERT EXP10-C
Do not depend on the order of evaluation of subexpressions or the order in which side effects take place
- CERT EXP30-C
Do not depend on order of evaluation between sequence points
- CWE 696
Incorrect Behavior Order
- MISRA C:2004 12.2
(Required) The value of an expression shall be the same under any order of evaluation that the standard permits.
- MISRA C:2012 Rule-1.3
(Required) There shall be no occurrence of undefined or critical unspecified behaviour
- MISRA C:2012 Rule-13.2
(Required) The value of an expression and its persistent side effects shall be the same under all permitted evaluation orders
Code examples
The following code example fails the check and will give a warning:
int main(void) {
int i = 0;
i = i * i++; //unspecified order of operations
return 0;
}
The following code example passes the check and will not give a warning about this issue:
int main(void) {
int i = 0;
int x = i;
i++;
x = x * i; //OK - statement is broken up
return 0;
}