Bienvenidos sean a este post, hoy hablaremos sobre las enumeraciones.
En este post hemos hablado sobre las constantes, en este otro post hemos visto la forma antigua de definir una constante, esto lo mencionamos porque las enumeraciones consisten en la enumeracion de constantes, antes de entrar en tema vamos a ver como es su sintaxis:
enum nombre {
enumeracion_1 [=valor],
enumeracion_2 [=valor],
enumeracion_3 [=valor],
...
enumeracion_N [=valor],
};
Siempre usaremos la palabra enum para definirlo, luego pasaremos todas las constantes que enumeraremos y de forma opcional podemos pasarle un valor, cada uno ira separado por la coma, podemos pasar todos los que sean necesarios por ultimo debemos cerrarlo con el punto y coma, para entender como trabaja vamos a crear un ejemplo simple, en este caso haremos una especie de semaforo, para ello crearemos un archivo que llamaremos ejemplo04.c y le agregaremos el siguiente codigo:
ejemplo04.c
#include <stdio.h>
const int rojo = 0;
const int amarillo = 1;
const int verde = 2;
int main()
{
int luz = rojo;
if (luz == rojo)
printf("Esta en rojo\n");
else if (luz == amarillo)
printf("Esta en amarillo\n");
else
printf("Esta en verde\n");
return 0;
}
Todavia no hemos implementado al enum pero analicemos este codigo primero, nuestros primeros pasos seran definir tres constantes para cada color del semaforo, cada uno sera representado con un valor entero, en el main definiremos una variable de tipo int llamada luz y a esta le asignaremos la constante rojo, despues tenemos un condicional donde verificaremos el valor de la variable luz, en cada caso y devolveremos un mensaje relacionado a este, compilemos y veamos como trabaja:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo04
Esta en rojo
tinchicus@dbn001vrt:~/lenguajes/C$
Hasta aqui vemos que funciona perfectamente pero vamos a mejorarlo, para ello modificaremos el codigo de la siguiente manera:
#include <stdio.h>
enum semaforo {
rojo,
amarillo,
verde
};
int main()
{
int luz = amarillo;
if (luz == rojo)
printf("Esta en rojo\n");
else if (luz == amarillo)
printf("Esta en amarillo\n");
else
printf("Esta en verde\n");
return 0;
}
Las modificaciones fueron minimas, para este caso primero eliminamos las tres constantes y las reemplazamos con un enum, observen que lo nombramos como semaforo y simplemente pasamos los tres nombres de las constantes, la otra modificacion fue cambiar el valor de luz para ver si sigue funcionando nuestro condicional, compilemos y veamos como es su salida:
tinchicus@dbn001vrt:~/lenguajes/C$ ./prog/ejemplo04
Esta en amarillo
tinchicus@dbn001vrt:~/lenguajes/C$
Como pueden ver es muy simple y nos puede facilitar mucho nuestro codigo pero esto no termina aqui, vamos a tomar el codigo anterior y lo modifficaremos nuevamente:
ejemplo04.c
#include <stdio.h>
enum semaforo {
rojo = 100,
amarillo = 200,
verde = 300
};
int main()
{
int luz = amarillo;
switch(luz)
{
case rojo:
printf("Esta en rojo\n");
break;
case amarillo:
printf("Esta en amarillo\n");
break;
case verde:
printf("Esta en verde\n");
break;
}
return 0;
}
En este caso le aplicamos unos valores a nuestras constantes enumeradas, dando la posibilidad de poder asignar un valor que podemos usarlo de esa manera en todo nuestro codigo, despues quitamos el condicional por medio de if y lo sustituimos por un switch donde en cada case tenemos cada una de las constantes y con los mensajes que mostrabamos antes, si lo compilan y lo vuelven a usar debera seguir funcionando de la misma forma, los valores solo pueden ser literales o provenientes de otras constantes no se pueden asignar valores de variables, si lo hicieran asi al compilarlo devolvera este error:
error: enumerator value for ‘rojo’ is not an integer constant
En resumen, hoy hemos visto enum, que es, como se compone, como nos puede ayudar con el tema de las constantes, las distintas formas de usarlo, y que podemos asignarle y que no podemos, espero les haya sido de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.50
