There is no bug in the MISRA checker, it behaves correctly. You get this error because the C standard is flawed and illogical.
There are two items:
One
is an enumeration constant. The standard §6.7.2.2/2 states that this shall be compatible with int
, no exceptions.
MyVariable
is an enumerated type. The standard §6.7.7.2/4 states that this should be compatible with char, a signed integer type or an unsigned integer type. Which type that applies is implementation-defined behavior.
In your case, the implementation-defined enumerated type appears to be equal to unsigned int.
So the code attempts to implictly convert a variable of signed int to unsigned int, which is a violation of MISRA 2004 10.1.
MISRA-compliant code should be if (One == (MyEnum)MyVariable)
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…