Der folgende Code schlägt bei einer MISRA-Prüfung fehl. Die konkrete Fehlermeldung ist:Wie werden Integer-Typen implizit konvertiert?
(MISRA-C: 2004 10,1/R), um den Wert eines Ausdrucks von Integer-Typ wird nicht implizit zu einem anderen Basiswerttyp umgewandelt werden, wenn es keine Umwandlung zu a ist breite integer-Typ derselben 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;
}
- Warum ist der logische Ausdruck umgewandelt?
- Was wird hier konvertiert?
- Warum besteht der Code die MISRA-Prüfung, wenn ich
One
undMyVariable
austauschen?
bearbeiten: Der Compiler ist ein TI "MSP430 C/C++ Compiler v4.0.0" mit inbegriffen MISRA Prüfregeln.
Ich habe schon schlechte Argumente über dieses MISRA-Ding. Was du machst, ist vollkommen in Ordnung. – cnicutar
Ich würde die Compiler Fehlerhypothese Sekunde – Alex
Setzt es die gleiche Fehler/Warnung für 'if (MyVariable == One) {} '? – wildplasser