2010-03-23 11 views
9

Cuando declara una variable de enumeración como esto:¿Qué puedo hacer con una variable enum?

enum paint_colors { RED, GREEN, BLUE, ...} colors; 

es la variable colors útil? Si es así, ¿qué puedo hacer con eso?

Gracias de antemano.

+0

@drigoSkalWalker, he arreglado tu sintaxis por ti. Espero haber entendido la pregunta correctamente. –

+0

He votado muchas respuestas ahora. Pistolas rápidas, leer primero, disparar después. Él no está preguntando sobre los valores enum, sino sobre la variable enum. Todas las respuestas, pero la primera, ignoran por completo esto. – Suma

Respuesta

9

Internamente, un enum se trata como un número entero que solo puede contener un rango limitado de valores. En este caso, las constantes RED, GREEN, BLUE, ... se definirán y serán iguales a 0, 1, 2, ... (respectivamente). La variable colors se puede usar en cualquier lugar donde se pueda usar int. Puede usar operadores como ++ para recorrer la lista de colores. La única diferencia entre declarar enum paint_colors colors y int colors es que la variable enumerada puede debe solo tener asignada una de las constantes enumeradas.

Esto le brinda varias ventajas sobre el uso de #define para crear una serie de constantes y el uso de int normal para colors. Primero, algunos depuradores pueden detectar que colors es un tipo enumerado y mostrará el nombre de la constante enumerada en lugar de un valor numérico.

Más importante aún, esto puede agregar una capa adicional de comprobación de tipos.No es requerido por el estándar C, pero algunos compiladores verifican y aseguran que los valores asignados a una variable del tipo enumerado correspondan a una de las constantes enumeradas.

mentalmente, casi se puede pensar en esto es similar a decir:

#define RED 0 
#define GREEN 1 
#define BLUE 2 
typedef int paint_colors; 
paint_colors colors; 

La variable se trata como un int, sino explícitamente lo que le da un tipo diferente ayuda a clarificar lo que la variable es y para qué sirve usado para.

0

Una enumeración es útil cuando tiene un conjunto dado de valores posibles, donde cada valor tiene un nombre significativo. En otro lugar, te refieres a los valores enum, en lugar de a los "números mágicos", que pueden volverse sin sentido entre otros códigos.

+0

Eso no es lo que pregunta el OP, creo. Él quiere saber para qué 'colores 'es bueno. –

+0

Hmm, claramente entendí mal la pregunta. –

13

Realmente lo que estás haciendo allí es declarar una variable en línea con el resto de la definición de la enumeración. Es equivalente a:

enum paint_colors { RED, GREEN, BLUE }; 
enum paint_colors colors; 

A menudo, verá una typedef asociado con la definición:

typedef enum _paint_colors { RED, GREEN, BLUE } paint_colors; 

que le permite utilizar la enumeración más como el construido en tipos:

paint_colors color; 

Así que la respuesta a su pregunta es que colors es una variable del tipo enum paint_colors, y se puede usar de la forma que considere apropiada para dicha variable:

colors = RED; 
if (colors != GREEN) 
{ 
    colors = BLUE; 
} 

Y así sucesivamente.

+0

continúa siendo inútil para mí, y para C. Puedo usar int u otros tipos en lugar de paint_color type, los colores variables aún son inútiles. – drigoSkalWalker

+0

@drigoSkalWalker, te permite hacer algunas comprobaciones de tipos limitadas. Si no quiere usarlos, no es necesario. Sin embargo, puede ser útil. –

+2

Usted está haciendo dos preguntas ahora. Si los _variables_ 'colores' son útiles, depende del resto del programa. El _type_ 'enum paint_colors' es útil ya que comunica el intento y el rango de valores para esta variable y otras; pone más énfasis en el What ('este es uno de 3 colores'), y menos en el How ('esto se almacena como un int '). – Lars

1

¡Podrías pintar una montaña rusa!

typedef struct { 
    Color car; 
    Color door_handle; 
    Color wheels; 
} RollerCoasterColors; 

int main(void) { 
    RollerCoasterColors roller_coaster_colors; 
    roller_coaster_colors.car = RED; 
    roller_coaster_colors.door_handle = YELLOW; 
    roller_coaster_colors.wheels = PURPLE; 

    // now paint_roller_coaster() knows what colour to paint each part! 
    paint_roller_coaster(roller_coaster_colors); 
} 
+0

Eso no usa la variable 'colors' en absoluto, que es lo que el OP estaba preguntando. –

-1

Encuentro las enumeraciones especialmente útiles durante la depuración. Si solo usa #define para definir constantes usadas como valores para alguna variable, el depurador le mostrará el número. Con enum puede mostrarte los nombres.

Y si necesita un conjunto de valores posibles (constantes) para una sola variable, puede definirlo de la manera en que lo mostró.

0

En C, la variable de tipo de enumeración se puede repetir, como ++, +; Pero esto no está permitido en C++;

enum WEEKDAY {MON, TUE, WED, THU, FRI, SAT, SUN, END}; 
for(WEEKDAY day = 0; day < END; day++){ 
    printf("day index = %d\n", day); 
} 

se pueden compilar en C, pero no en C++;

Cuestiones relacionadas