¿Cómo definir un tipo enumerado (enum) en C?

Resuelto lindelof asked hace 15 años • 13 respuestas

No estoy seguro de cuál es la sintaxis adecuada para usar enumeraciones C. Tengo el siguiente código:

enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy = IMMEDIATE;

Pero esto no se compila, con el siguiente error:

error: conflicting types for ‘strategy’
error: previous declaration of ‘strategy’ was here

¿Qué estoy haciendo mal?

lindelof avatar Jul 09 '09 15:07 lindelof
Aceptado

Vale la pena señalar que no necesita un archivo typedef. Puedes hacerlo de la siguiente manera.

enum strategy { RANDOM, IMMEDIATE, SEARCH };
enum strategy my_strategy = IMMEDIATE;

Es una cuestión de estilo si lo prefieres typedef. Sin él, si desea hacer referencia al tipo de enumeración, debe utilizar enum strategy. Con él, puedes simplemente decir strategy.

Ambas formas tienen sus pros y sus contras. El primero tiene más palabras, pero mantiene los identificadores de tipo en el espacio de nombres de etiquetas donde no entrarán en conflicto con los identificadores ordinarios (piense en struct statla statfunción: estos tampoco entran en conflicto), y donde inmediatamente verá que es un tipo. El otro es más corto, pero incorpora identificadores de tipo al espacio de nombres ordinario.

Johannes Schaub - litb avatar Jul 09 '2009 16:07 Johannes Schaub - litb

La declaración de una variable enum se hace así:

enum strategy {RANDOM, IMMEDIATE, SEARCH};
enum strategy my_strategy = IMMEDIATE;

Sin embargo, puedes usar a typedefpara acortar las declaraciones de variables, así:

typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy;
strategy my_strategy = IMMEDIATE;

Es una buena idea tener una convención de nomenclatura para distinguir entre tipos y variables:

typedef enum {RANDOM, IMMEDIATE, SEARCH} strategy_type;
strategy_type my_strategy = IMMEDIATE;
RichieHindle avatar Jul 09 '2009 08:07 RichieHindle