Il seguente codice non riesce su un controllo MISRA. Il messaggio di errore calcestruzzo è:Come vengono convertiti implicitamente i tipi integer?
(MISRA-C: 2004 10.1/R) il valore di un'espressione di tipo intero sono non essere implicitamente convertito in un tipo sottostante diversa, se è non una conversione di un più ampia tipo integer dello stesso 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;
}
- Perché viene convertita l'espressione logica?
- Cosa viene convertito qui?
- Perché il codice supera il controllo MISRA quando si scambiano
One
eMyVariable
?
Edit: Il compilatore è un TI "MSP430 C/C++ Compiler v4.0.0" con incluso MISRA regole di controllo.
Ho già brutti scherzi a proposito di questo MISRA. Quello che stai facendo è perfettamente a posto. – cnicutar
Secondo l'ipotesi del bug del compilatore – Alex
Produce lo stesso errore/avviso per 'if (MyVariable == One) {}'? – wildplasser