C enum (enumeración)

La enumeración es un tipo de datos básico en C, utilizado para definir un conjunto de constantes con valores discretos; puede hacer que los datos sean más concisos y legibles.

El tipo de enumeración se utiliza normalmente para dar nombre a un grupo de constantes relacionadas en un programa, lo que facilita la legibilidad y el mantenimiento del programa.

Para definir un tipo de enumeración, se necesita utilizarenumla palabra clave, seguida del nombre del tipo de enumeración y, encerrado entre llaves{}un conjunto de constantes de enumeración. Cada constante de enumeración puede representarse con un identificador, y también se les puede asignar un valor entero. Si no se especifica, por defecto empieza desde0y se incrementa a partir de ahí.

El formato de definición de la sintaxis de enumeración es:

enum 枚举名 {枚举元素1,枚举元素2,……};

A continuación, pongamos un ejemplo: por ejemplo, una semana tiene 7 días. Si no usamos enumeración, necesitamos usar `#define` para definir un alias para cada entero:

#define MON 1 #define TUE 2 #define WED 3 #define THU 4 #define FRI 5 #define SAT 6 #define SUN 7

Esto parece bastante código. Ahora echemos un vistazo a la forma de usar enumeraciones:

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

¿No parece más conciso así?

Nota:El valor predeterminado del primer miembro de la enumeración es 0 de tipo entero, y el valor de los miembros siguientes se obtiene sumando 1 al miembro anterior. En este ejemplo, definimos el valor del primer miembro como 1, el segundo como 2, y así sucesivamente.

Se puede cambiar el valor de los elementos de enumeración al definir el tipo de enumeración:

enum season {spring, summer=3, autumn, winter};

Los elementos de enumeración sin valor especificado tienen como valor el del elemento anterior más 1. Es decir, el valor de `spring` es 0, el de `summer` es 3, el de `autumn` es 4 y el de `winter` es 5.

Definición de variables de enumeración

Antes solo hemos declarado el tipo de enumeración. Ahora veamos cómo definir variables de enumeración.

Podemos definir variables de enumeración de las siguientes tres formas:

1. Primero definir el tipo de enumeración y luego definir la variable de enumeración.

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;

2. Definir la variable de enumeración al mismo tiempo que se define el tipo de enumeración.

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

3. Omitir el nombre de la enumeración y definir directamente la variable de enumeración.

enum
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

Ejemplo

#include <stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; int main() { enum DAY day; day = WED; printf("%d",day); return 0; }

El resultado del ejemplo anterior es:

3

En C, el tipo de enumeración se trata como tipo `int` o `unsigned int`, por lo que según el estándar de C no hay forma de recorrer el tipo de enumeración.

Sin embargo, en algunos casos especiales, si el tipo de enumeración es continuo, se puede lograr un recorrido condicional.

El siguiente ejemplo usa `for` para recorrer los elementos de la enumeración:

Ejemplo

#include <stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day; int main() { // Recorrer los elementos de la enumeración for (day = MON; day <= SUN; day++) { printf("Elemento de enumeración: %d\n", day); } }

El resultado del ejemplo anterior es:

枚举元素:1 
枚举元素:2 
枚举元素:3 
枚举元素:4 
枚举元素:5 
枚举元素:6 
枚举元素:7

El siguiente tipo de enumeración no es continuo; este tipo de enumeración no se puede recorrer.

enum
{
    ENUM_0,
    ENUM_10 = 10,
    ENUM_11
};

Uso de la enumeración en `switch`:

Ejemplo

#include <stdio.h> #include <stdlib.h> int main() { enum color { red=1, green, blue }; enum color favorite_color; /*El usuario introduce un número para elegir un color.*/ printf("Por favor, introduce tu color favorito: (1. rojo, 2. verde, 3. azul):"); scanf("%u", &favorite_color); /*Resultado de salida*/ switch (favorite_color) { case red: printf("Tu color favorito es el rojo."); break; case green: printf("Tu color favorito es el verde."); break; case blue: printf("Tu color favorito es el azul."); break; default: printf("No has elegido tu color favorito."); } return 0; }

El resultado del ejemplo anterior es:

请输入你喜欢的颜色: (1. red, 2. green, 3. blue): 1
你喜欢的颜色是红色

Convertir un entero a enumeración

El siguiente ejemplo convierte un entero a enumeración:

Ejemplo

#include <stdio.h> #include <stdlib.h> int main() { enum day { saturday, sunday, monday, tuesday, wednesday, thursday, friday } workday; int a = 1; enum day weekend; weekend = ( enum day ) a; // Conversión de tipo //weekend = a; // Error printf("weekend:%d",weekend); return 0; }

El resultado del ejemplo anterior es:

weekend:1
Otras extensiones