in

Enumeración (o enumeración) en C

gfg 200x200 min

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.

Enum In C

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

La palabra clave ‘enum’ se utiliza 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 formas:

// 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;

#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 la variable y el valor de «Mié» se asigna al día, que es 2. Como resultado, se imprime 2.

Otro ejemplo de enumeración es:

#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 ciclo 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 C, tanto ‘Fallido’ como ‘Congelado’ tienen el mismo valor 0.

#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 explícitamente valores a los nombres de enumeración, el compilador asigna por defecto valores a partir de 0. Por ejemplo, en el siguiente programa en C, el domingo obtiene el valor 0, el lunes obtiene 1, y así sucesivamente.

#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.

#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 desde el valor entero mínimo posible hasta el 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.

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:
Predecir la salida de los siguientes programas en C

Programa 1:

#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:

#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 ‘Fallido’ usando la siguiente macro.

#define Working 0

#define Failed 1

#define Freezed 2

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

enum state  {Working, Failed, Freezed};

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido 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 envíe su artículo por correo electrónico a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Si desea aprender de los mejores videos seleccionados y problemas de práctica, consulte el Curso básico de C de Básico a Avanzado C.

Deja una respuesta

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

apple touch icon@2

cadena – ¿Qué es el orden lexicográfico?

chow mein examples

Chow Mein vs Lo Mein – 3 diferencias (con video e imágenes)