Quali sono gli abusi comuni di "enum" in C?

7

Ho visto il codice C in cui le persone usavano pesantemente enum. Ma tutto ciò che fa è confondere gli altri. In molti posti gli interi semplici possono fare la stessa cosa con meno ambiguità. Quali sono gli abusi comuni di enum?

    
posta Gulshan 13.12.2010 - 09:50
fonte

3 risposte

8

Un caso che riesco a pensare, anche se non ho ancora visto in natura, è di abusare delle enumerazioni come una raccolta di costanti intere disgiunte:

enum somestuff { days_in_week = 7,
                 months_in_year = 12,
                 number_of_planets = 8,
                 fingers_per_hand = 5 };

L'esempio più patologico e innocente che posso immaginare sarebbe

enum numbers { one, two, three, four, five, six, seven, eight, nine, ten };

perché one == 0, two == 1 ecc.

    
risposta data 13.12.2010 - 12:34
fonte
5

Il problema più grande che ho avuto con le enumerazioni è che vengono definiti due volte.

EnumZ
{
    Yes,
    No,
    Maybeso
}

e qualcun altro, con un nome molto simile, avrebbe

EnumZee
{
    No,
    Maybeso,
    Yes
}

Non è una "presa rapida" perché è l'enumerazione che hai fatto ... giusto? È qualcosa che non vedi fino a quando non passi il codice e vedi che il tuo "No" sta tornando a zero anziché uno.

    
risposta data 13.12.2010 - 14:54
fonte
0

In C ++ (sarebbe stato pubblicato come commento, ma per il codice funziona meglio)

enum ELength
{
   mm = -3, 
   m = 0,
   km = 3,
   // ...
}


double operator*(double d, ELength scale)
{
   return d * pow(10, scale);
}

// allows:
double len = 2*mm;

Un'altra applicazione potrebbe essere qualificante:

 enum EConstraintMode
 {
    abs   = 1,
    rel   = 2,
    expand = 3,
 };


 struct Constraint
 {
    EConstraintMode mode;
    int value;
 }

 Constraint operator-(EConstraintMode mode, int value)
 {
    Constraint c = { mode, value };
    return c;
 }

 void SetConstraints(Constraint top, Constraint Left,....) { ... }

 SetConstraint(abs-12, rel-50, abs-12, rel-50);

Sono ancora indeciso se questo è maledettamente bello, malvagio orribile, o entrambi. (Non lo userei nel codice di produzione, per questo motivo).

    
risposta data 13.12.2010 - 15:39
fonte

Leggi altre domande sui tag