¿Cuáles son los usos indebidos comunes de "enum" en C?

7

He visto un código C en el que la gente usa mucho enumeración. Pero todo lo que hace es confundir a los demás. En muchos lugares, los enteros planos pueden hacer lo mismo con menos ambigüedad. ¿Cuáles son los abusos comunes de enumeración?

    
pregunta Gulshan 13.12.2010 - 09:50

3 respuestas

8

Un caso en el que puedo pensar, aunque todavía no he visto en la naturaleza, es abusar de las enumeraciones como una colección de constantes enteras inconexas:

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

El ejemplo más patológico e inocente que puedo imaginar sería

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

porque one == 0, two == 1 etc.

    
respondido por el user281377 13.12.2010 - 12:34
5

El problema más grande que he tenido con las enumeraciones es que se definan dos veces.

EnumZ
{
    Yes,
    No,
    Maybeso
}

y alguien más, con un nombre muy similar, tendría

EnumZee
{
    No,
    Maybeso,
    Yes
}

No es una "captura rápida" porque esa es la enumeración que hiciste ... ¿verdad? Es algo que realmente no se ve hasta que se pasa por el código y se ve que su "No" regresa como cero en lugar de uno.

    
respondido por el Mike M. 13.12.2010 - 14:54
0

En C ++ (se habría publicado como comentario, pero para el código esto funciona mejor)

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


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

// allows:
double len = 2*mm;

Otra aplicación sería calificativa:

 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);

Todavía estoy indeciso si esto es tremendamente genial, malvadamente horrible, o ambos. (No utilizaría eso en el código de producción, por esa razón).

    
respondido por el peterchen 13.12.2010 - 15:39

Lea otras preguntas en las etiquetas