(Este artículo forma parte del Curso de Programación en C)
Una enumeración es un conjunto de constantes enteras. A la enumeración se le asigna un nombre que, a todos los efectos, se comporta como un nuevo tipo de datos, de manera que las variables de ese tipo son variables enteras que solo pueden contener los valores especificados en la enumeración.
La definición de una enumeración suele hacerse así:
enum nombre_enumeración {constante1 = valor1, constante2 = valor2, ..., constanteN = valorN };
Por ejemplo:
enum dias_semana {LUNES=1, MARTES=2, MIERCOLES=3, JUEVES=4, VIERNES=5, SÁBADO=6, DOMINGO=7 };
Las variables que se declaren del tipo dias_semana serán, en realidad, variables enteras, pero sólo podrán recibir los valores del 1 al 7, así:
dias_semana dia; dia = LUNES; dia = 1; /* Las dos asignaciones son equivalentes */
Si no se especifican los valores en la enumeración, C les asigna automáticamente números enteros a partir de 0. Por ejemplo, en la siguiente definición, la constante LUNES valdrá 0, MARTES, 1, etc:
enum dias_semana { LUNES, MARTES , MIÉRCOLES, JUEVES, VIERNES, SÁBADO, DOMINGO};
Por último, el programador debe tener en cuenta que los identificadores utilizados en una enumeración son constantes enteras y que, por lo tanto, lo siguiente imprime en la pantalla un 2, y no la palabra “MIÉRCOLES”:
dias_semana dia;
dia = MIERCOLES;
printf("%i", dia);

2 comments
Comments feed for this article
Trackback link
http://profeblog.es/blog/alfredo/2008/05/13/enumeraciones-en-c/trackback/
22 Enero 2009 at 19:16
Dav
Hola de nuevo Alfredo,
en primer lugar muchas gracias por tu rapidez en contestar mi anterior post. Ademas tengo examen dentro de 4 dias i me viene al pelo su ayuda
gracias
un cosilla, ¿ son equivalentes las enumeraciones a las deficiniciones (#define)?
por ejemplo seria lo mismo decir
enum {
LUNES = 1,
MARTES = 2,
};
que
#define LUNES 1
#define MARTES 2
Gracias
26 Enero 2009 at 14:56
Alfredo Moreno Vozmediano
Pues sí y no, mire. Las directivas #define sirven para indicar al precompilador que, donde pone LUNES, hay que poner en realidad 1. El archivo fuente se revisa de arriba a abajo sustituyendo todas las ocurrencias de LUNES por 1, y el archivo así revisado es lo que se compila.
Las enumeraciones funcionan como constantes, es decir, como si declarase:
const int LUNES = 1;
…pero, eso sí, desde el punto de vista prácitco no hay ninguna diferencia.