enum oder define?



  • Hi,
    ich arbeite derzeit an einem größeren Projekt und stehe vor folgendem Problem:
    Ich benötige für eine große Anzahl von Objekten eine eindeutige ID, die von Werten und dem Typen des Objekts abhängt. Derzeit sieht das so aus:

    typedef unsigned long SoRID;
    
    #define ES_CALC1 10001
    #define ES_CALC2 10002
    // usw. //
    

    Mir persönlich gefällt diese Lösung nicht wirklich. Daher habe ich mir folgendes überlegt:

    enum SoRID
    {
       ES_CALC1 = 10001,
       ES_CALC2 = 10002,
       // usw. //
    }
    

    Was für Argumente gibt es für bzw. gegen die beiden Vorschläge? Wie sieht es mit der Performance aus?
    Und: Gibt es Alternativen?

    mfg Kenrik



  • Dafür: Sauber und Typsicher
    Dagegen: Nichts (imho) 😉
    Performance: Enums sind für den Compiler genauso konstant wie durch den Präprozessor ersetzte Zahlenwerte

    Alternative: const int (aber ältere C++ Compiler sehen diese u.U. nicht als Compiletime-Konstanten an)

    EDIT:
    Ob das mit dem älteren Compiler auf Dich zutrifft, kannst Du am Besten mit folgendem Schnippsel überprüfen:

    const int xyz = 100;
    int array[xyz];
    

    Ein "älterer" Compiler wird Dir um die Ohren hauen dass xyz nicht compiletime-konstant ist. Schalte aber die Spracherweiterungen des Compilers ab, denn der G++ erlaubt z.B. Arrays variabler Länge (wenn auch imho nicht auf globaler Ebene)


Anmelden zum Antworten