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.


Log in to reply