¿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
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;
}
¿Por qué se convierte la expresión lógica?¿Qué se convierte aquí?¿Por qué el código pasa el cheque MISRA, cuando cambioOne
yMyVariable
?Editar: El compilador es un TI "MSP430 C / C ++ Compiler v4.0.0" con verificación de reglas MISRA incluida.