¿Cómo se convierten implícitamente los tipos enteros?
El siguiente código falla en una verificación MISRA. El mensaje de error concreto es:
(MISRA-C: 2004 10.1 / R) El valor de una expresión de tipo entero no se convertirá implícitamente a un tipo subyacente diferente si no es una conversión a un tipo entero más ancho de la misma firmeza
<code>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; } </code>¿Por qué se convierte la expresión lógica?¿Qué se convierte aquí?¿Por qué el código pasa el cheque MISRA, cuando cambio
One
yMyVariable
?Editar: El compilador es un TI "MSP430 C / C ++ Compiler v4.0.0" con verificación de reglas MISRA incluida.