cmisrapc-lint

Dependence placed on C/C++ operator precedence; operators '&&' and '==' [MISRA 2012 Rule 12.1, advisory] | pclint 9050


uint8 config;    
#define ELEM1 1U

void test1(void)
{
    /*Check Bit 0 of Configuration*/
    if((config) == 2 && (config) == 4)
    {
        arr[ELEM1].status[0]          = 0x00;
    }

}

do I need to try with

1)

if(((config) == 2) && ((config) == 4))
if((Boolean)((config) == 2) && ((config) == 4))

after above change, I am observing error now:

Conditional expression should have essentially Boolean type [MISRA 2012 Rule 14.4, required]


Solution

  • First of all, config can't realistically have the value 2 and 4 at once, now can it? So you probably meant to use ||. Or bitwise & perhaps?

    As for the warning, if you mix several operators in the same expression, MISRA-C requires that you add parenthesis around sub expressions. The MISRA compliant code would be:

    if( (config==2) || (config==4) )
    

    The result of && || etc operators is essentially boolean, so there is no need to cast.