![]() |
![]() |
3392 | ![]() |
||||
![]() | |||||||
| Readability | |||||||
The order in which operators are processed in this expression is not sufficiently clear and so additional parentheses are recommended. In the absence of parentheses, the sequence is determined by rules of precedence and associativity. In this expression, there are 2 identical shift operators, 2 identical relational operators or 2 identical equality operators, and the order in which they are evaluated may not be obvious. In fact, the first operator (the left hand one) is evaluated first. Add parentheses around this operator and its operands to make this clear. For example:
/*PRQA S 502,2017,3198,3199,3203,3401,3408,3447,4112 ++*/
extern int a;
extern int b;
extern int c;
extern void foo(void)
{
int r;
r = a >= b >= c; /* Message 3392 + 3390 */
r = (a >= b) >= c; /* OK */
r = a == b == c; /* Message 3392 + 3390 */
r = (a == b) == c; /* OK */
r = a >> b >> c; /* Message 3392 + 3390 */
r = (a >> b) >> c; /* OK */
}
MISRA C:2012 Rules applicable to message 3392:
| Rule-12.1 (Advisory) | The precedence of operators within expressions should be made explicit |
See also:
![]() | ||
| QA·C Source Code Analyser 8.1
MISRA C:2012 Compliance Module 1.0 © 2012 Programming Research. www.programmingresearch.com | Personality Groups | Glossary | Message Index | MISRA C:2012 Rule Index | Contents |