The following code fails on a MISRA check. The concrete error message is:
(MISRA-C:2004 10.1/R) The value of an expression of integer type shall not be implicitly converted to a different underlying type if it is not a conversion to a wider integer type of the same signedness
typedef enum _MyEnum { One, Two } MyEnum;
MyEnum MyVariable;
int foo(void)
{
int result = 1;
if (One == MyVariable) // fails here with MISRA-C:2004 10.1/R
{
result = 2;
}
return result;
}
- Why is the logical expression converted?
- What is converted here?
- Why does the code pass the MISRA check, when I swap
One
andMyVariable
?
Edit: The compiler is a TI "MSP430 C/C++ Compiler v4.0.0" with included MISRA rules check.
if (MyVariable == One) {}
? – wildplasser