Recommendations to resolve issue 12.4 - 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: Recommendations to resolve issue 12.4 (/showthread.php?tid=1158) |
Recommendations to resolve issue 12.4 - jbrookley - 25-02-2015 Hello, I had a question regarding rule 12.4 and realize I asked a similar question here: http://www.misra-c.com/forum/viewtopic.php?f=68&t=1296 I didn't want to bump an old thread so I started a new one (hopefully, that's ok). I received an error for rule 12-4 with the following section of code: Code: if((CommandState!=7u)&&(CommandState!=8u)&&(CommandState!=9u)&&(CommandState!=10u)&&(CommandState!=11u)&&(commData==0x24u)) /* Please ignore the fact this is written inefficiently for now */ I resolved this issue using the following section of code but I wasn't sure if this is the best way to handle the code or if it's recommended to handle it using a different technique: [code]if(commData==0x24u) { if(CommandState>=7u) { if(CommandState Re: Recommendations to resolve issue 12.4 - misra-c - 13-03-2015 Your first code example will only violate rule 12.4 if CommandState and/or commData have volatile qualified types. You would violate no rules by restructuring your code with multiple "if statements". However you should be aware that if CommandState is volatile qualified that its value could change between the tests in both versions of the code. Two alternatives ways of writing the example would be either with a switch statement: Code: switch ( CommandState ) Code: uint32_t CommandState_hold; /* or appropriate type */ |