Ist ein Enum-Wert nicht vergleichbar?
-
Hallo,
ich versuche gerade Code zu Verbessern mit Hilfe von Misra. Nun bekomme ich aber immer Probleme, wenn eine if Anweisung kommt. Dafür folgende Codeblock:
typedef enum { FALSE = 0, TRUE = 1 } BOOL; BOOL foo = TRUE; if(foo == TRUE){} //Hier ist das Problem
An der If-Anweisung bekomme ich nun den Hinweis: "information loss conversion (from 'enum (null)' to 'signed int') in assignment operation". Dabei habe ich das Verständnisproblem, warum er einen signed int benutzen sollte, gehört beides doch dem enum an?
Hat jemand einen Rat für mich
Gruß Björn
-
Was spricht gegen
enum BOOL{ FALSE, TRUE }; /* ... */ BOOL val = TRUE; if( val == TRUE ) { /* ... */ }
?
-
z.b. dass es nicht compiliert.
mbu schrieb:
wieso nicht?
mbu schrieb:
BOOL val = TRUE;
...muss z.b. so aussehen
enum BOOL val = TRUE;
-
Wieso nicht?
-
Unter C++ sind enum's eigenständige Datentypen, unter C "nur" eine Sammlung von int-Konstanten (d.h. TRUE ist da kein BOOL-Wert, sondern ein int).
@mbu: Dein Code funktioniert nur unter C++ - in C müsstest du "enum BOOL val = TRUE;" schreiben.
-
mbu schrieb:
Wieso nicht?
Weil hier nicht das C++, sondern das ANSI-C Forum ist.
Weil in der Sprache ANSI-C eine enum- (oder struct-) Definition keine Typdefinition ist.
-
Ok. Mea Culpa. Ich verneige mich und ziehe mich demütigst zurück.