Verwendung von enums in ANSI-C
-
Hallo,
ich habe in meinem Code zwei enums, die den Namen eines Eintrags gemein haben. Verwende ich nun die Einträge der enums im Code ohne Präfix, so passiert es, dass der Eintrag vom falschen enum genommen wird und somit der Zahlenwert falsch ist.
Um das zu um umgehen habe ich ein Präfix vor den Eintrag geschrieben.
typedef enum { A, G, K } Type1; typedef enum { O, A, C } Type2; Type1 var1; Type2 var2; var2 = Type2::A;
Ist dieser Doppelpunkt denn ANSI-C konform? Bisher kannte ich ihn nur aus C++. Bin mir daher nicht sicher, ob ich ihn verwenden kann. Evtl. akzeptiert Visual Studio ihn, aber er ist eigentlich nicht erlaubt.
Falls jemand auch noch weiß, ob das ganze laut MISRA erlaubt ist, wäre das natürlich noch besser.
Schon mal vielen Dank!
Gruß
Ryo
-
Nein in C kannst du da nichts machen, mein Compiler sieht das sogar als fehler:
test.c:13:3: Fehler: Redeklaration von Aufzählung »A« test.c:6:3: Anmerkung: Vorherige Definition von »A« war hier
Du kannst es aber so lösen:
typedef enum { Type1_A, Type1_G, Type1_K } Type1; typedef enum { Type2_O, Type2_A, Type2_C } Type2;
-
Ist denn der Doppelpunkt erlaubt? Denn dieser ist eigentlich recht praktisch, um schnell herauszufinden, welche Elemente der Enum enthält.
-
Beim enum in C wird ein neuer enum Typ definiert der vom Typ int ist
die Werte die du einführst (A,G,K) verhalten sich genauso als ob sie mit #define definiert wären
Außerdem gibt es keine Checks du kannst deinem enum also jede beliebige Zahl zuweisen
-
RyoShinzo schrieb:
Ist denn der Doppelpunkt erlaubt? Denn dieser ist eigentlich recht praktisch, um schnell herauszufinden, welche Elemente der Enum enthält.
den ::-Operator gibt es in C nicht
-
Das wäre auch in C++ nicht standardkonform.