Enumeración (o enum) en C

La enumeración (o enum) es un tipo de datos definido por el usuario en C. Se utiliza principalmente para asignar nombres a constantes integrales, los nombres hacen que un programa sea fácil de leer y mantener.
 

Por este error, el estado de la casa es 2, debería ser 3. Consulte el mismo ejemplo a continuación para una mejor comprensión.

enum State {Working = 1, Failed = 0}; 

La palabra clave ‘enum’ se usa para declarar nuevos tipos de enumeración en C y C++. A continuación se muestra un ejemplo de declaración de enumeración. 
 

// The name of enumeration is "flag" and the constant
// are the values of the flag. By default, the values
// of the constants are as follows:
// constant1 = 0, constant2 = 1, constant3 = 2 and 
// so on.
enum flag{constant1, constant2, constant3, ....... };

También se pueden definir variables de tipo enum. Se pueden definir de dos maneras: 
 

// In both of the below cases, "day" is 
// defined as the variable of type week. 

enum week{Mon, Tue, Wed};
enum week day;

// Or

enum week{Mon, Tue, Wed}day;

C

// An example program to demonstrate working
// of enum in C
#include<stdio.h>
 
enum week{Mon, Tue, Wed, Thur, Fri, Sat, Sun};
 
int main()
{
    enum week day;
    day = Wed;
    printf("%d",day);
    return 0;
}

Producción: 
 

2

En el ejemplo anterior, declaramos «día» como variable y el valor de «miércoles» se asigna al día, que es 2. Como resultado, se imprime 2.
Otro ejemplo de enumeración es: 
 

C

// Another example program to demonstrate working
// of enum in C
#include<stdio.h>
 
enum year{Jan, Feb, Mar, Apr, May, Jun, Jul,
          Aug, Sep, Oct, Nov, Dec};
 
int main()
{
   int i;
   for (i=Jan; i<=Dec; i++)     
      printf("%d ", i);
       
   return 0;
}

Producción: 
 

0 1 2 3 4 5 6 7 8 9 10 11

En este ejemplo, el bucle for se ejecutará desde i = 0 hasta i = 11, ya que inicialmente el valor de i es Jan, que es 0, y el valor de Dec es 11. Datos 
interesantes sobre la inicialización de enum.  
1. Dos nombres de enumeración pueden tener el mismo valor. Por ejemplo, en el siguiente programa en C, tanto ‘Error’ como ‘Congelado’ tienen el mismo valor 0. 
 

C

#include <stdio.h>
enum State {Working = 1, Failed = 0, Freezed = 0};
 
int main()
{
   printf("%d, %d, %d", Working, Failed, Freezed);
   return 0;
}

Producción: 

1, 0, 0

2. Si no asignamos valores explícitamente a los nombres de las enumeraciones, el compilador asigna valores de manera predeterminada a partir de 0. Por ejemplo, en el siguiente programa en C, el domingo obtiene el valor 0, el lunes obtiene el valor 1, y así sucesivamente. 
 

C

#include <stdio.h>
enum day {sunday, monday, tuesday, wednesday, thursday, friday, saturday};
 
int main()
{
    enum day d = thursday;
    printf("The day number stored in d is %d", d);
    return 0;
}

Producción: 

The day number stored in d is 4

3. Podemos asignar valores a algún nombre en cualquier orden. Todos los nombres no asignados obtienen valor como el valor del nombre anterior más uno. 
 

C

#include <stdio.h>
enum day {sunday = 1, monday, tuesday = 5,
          wednesday, thursday = 10, friday, saturday};
 
int main()
{
    printf("%d %d %d %d %d %d %d", sunday, monday, tuesday,
            wednesday, thursday, friday, saturday);
    return 0;
}

Producción: 

1 2 5 6 10 11 12

4. El valor asignado a los nombres de enumeración debe ser una constante integral, es decir, el valor debe estar en el rango del valor entero mínimo posible al valor entero máximo posible.
5. Todas las constantes de enumeración deben ser únicas en su alcance. Por ejemplo, el siguiente programa falla en la compilación. 
 

C

enum state  {working, failed};
enum result {failed, passed};
 
int main()  { return 0; }

Producción: 

Compile Error: 'failed' has a previous declaration as 'state failed'

Ejercicio: 
Prediga la salida de los siguientes programas en C
Programa 1: 
 

C

#include <stdio.h>
enum day {sunday = 1, tuesday, wednesday, thursday, friday, saturday};
 
int main()
{
    enum day d = thursday;
    printf("The day number stored in d is %d", d);
    return 0;
}

Programa 2: 
 

C

#include <stdio.h>
enum State {WORKING = 0, FAILED, FREEZED};
enum State currState = 2;
 
enum State FindState() {
    return currState;
}
 
int main() {
   (FindState() == WORKING)? printf("WORKING"): printf("NOT WORKING");
   return 0;
}

Enum vs Macro 
También podemos usar macros para definir constantes de nombres. Por ejemplo, podemos definir ‘Trabajando’ y ‘Error’ usando la siguiente macro. 
 

C

#define Working 0
#define Failed 1
#define Freezed 2

Hay múltiples ventajas de usar enum sobre macro cuando muchas constantes nombradas relacionadas tienen valores integrales. 
a) Las enumeraciones siguen reglas de alcance. 
b) A las variables de enumeración se les asignan valores automáticamente. Lo siguiente es más simple 
 

CPP

enum state  {Working, Failed, Freezed};
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 
Introducción Parte de este artículo es una contribución de Piyush Vashistha . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *