MISRA Discussion Forums
Rules 12.1 and 12.5 and unary operators - Printable Version

+- MISRA Discussion Forums (https://forum.misra.org.uk)
+-- Forum: MISRA C (https://forum.misra.org.uk/forumdisplay.php?fid=4)
+--- Forum: MISRA-C: 2004 rules (https://forum.misra.org.uk/forumdisplay.php?fid=17)
+---- Forum: 6.12 Expressions (https://forum.misra.org.uk/forumdisplay.php?fid=39)
+---- Thread: Rules 12.1 and 12.5 and unary operators (/showthread.php?tid=729)



Rules 12.1 and 12.5 and unary operators - pmhill - 22-04-2010

It is said in rules 12.1 and 12.5 that 12.5 is a special case of 12.1.

However, in rule 12.1, it is stated that no parentheses are required for the operand of a unary operator
while in rule 12.5 it is said that the operands of the logical operators && and || must be primary expressions;
the latter is exemplified in 12.5 with the following example:

if ( x && ( !y ) ) /* make !y primary */

So for rule 12.1, is something like:
if ( x && !y )
...
a violation?


Re: Rules 12.1 and 12.5 and unary operators - misra-c - 13-05-2010

Rule 12.1 provides some guidance on the use of parentheses in expressions. For logical operators, Rule 12.5 provides a stricter rule and therefore overrides 12.1 in this instance.


Re: Rules 12.1 and 12.5 and unary operators - udi - 17-08-2016

What is the rationale for unary logical not operator (!a) being treated differently than the unary minus operator (-a) ?


Re: Rules 12.1 and 12.5 and unary operators - misra-c - 09-12-2016

When the MISRA-C:2004 guidelines were updated to MISRA C:2012 it was realised that there was no reason to maintain the difference between the unary operators. Rule 12.5 was removed and the requirement for parentheses is now covered only by 12.1. This means that postfix, unary and cast operands of && and || are permitted without brackets in MISRA C:2012.

If you are continuing to use MISRA-C:2004, then the justification for any deviation could include that this Rule has been relaxed for MISRA C:2012