0Pricing
C Academy · Lección

Valores y rangos de enums

Controle los enteros subyacentes

Valores y rangos de enums es una lección gratuita de C Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.

Asignar valores explícitos

No está limitado a la secuencia predeterminada 0, 1, 2. Puede asignar cualquier entero a un nombre mediante =.

Esto resulta útil cuando los números deben coincidir con un sistema externo, como los códigos de estado HTTP.

enum Http { OK = 200, NOT_FOUND = 404, ERROR = 500 };

Imprimir valores personalizados

Una vez asignados, esos números exactos son los que se almacenan y se imprimen.

Aquí, los nombres del enum se asignan directamente a códigos HTTP estándar.

#include <stdio.h>
enum Http { OK = 200, NOT_FOUND = 404, ERROR = 500 };
int main(void) {
    printf("%d %d\n", OK, NOT_FOUND);
    return 0;
}

Combinar valores explícitos y predeterminados

Si establece algunos valores y deja otros en blanco, cada nombre vacío continúa contando a partir del valor anterior.

Por tanto, un nombre situado justo después de = 10 se convierte en 11, luego en 12, y así sucesivamente.

#include <stdio.h>
enum N { A = 10, B, C, D = 100, E };
int main(void) {
    printf("%d %d %d %d %d\n", A, B, C, D, E);
    return 0;
}

Comenzar en uno

Un recurso habitual consiste en hacer que el primer valor sea 1 en lugar de 0, para que la numeración coincida con la forma de contar de las personas.

Aquí MON es 1, por lo que los días van del 1 al 7.

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

Se permiten valores duplicados

Dos nombres de enum pueden compartir el mismo valor entero. C no exige que sean únicos.

A veces esto se utiliza para crear alias del mismo concepto.

#include <stdio.h>
enum Color { RED = 1, CRIMSON = 1, BLUE = 2 };
int main(void) {
    printf("%d %d\n", RED, CRIMSON);
    return 0;
}

Valores negativos

Los valores de un enum también pueden ser negativos. Son enteros con signo.

Esto permite expresar códigos de error inferiores a cero junto con un rango neutro o positivo.

#include <stdio.h>
enum Temp { COLD = -1, NORMAL = 0, HOT = 1 };
int main(void) {
    printf("%d %d %d\n", COLD, NORMAL, HOT);
    return 0;
}

Recurso del marcador COUNT

Si enumera elementos comenzando en 0 y añade un nombre final, ese último nombre equivale al número de elementos.

Este recurso de COUNT obtiene automáticamente el tamaño, incluso después de añadir elementos nuevos.

#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
    printf("%d fruits\n", FRUIT_COUNT);
    return 0;
}

Usar enum como índices de array

Como los valores enum son enteros, son excelentes índices de array.

Combinado con el recurso COUNT, puede dimensionar un array exactamente y acceder a sus elementos mediante nombres legibles.

#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
    int stock[FRUIT_COUNT] = {5, 3, 8};
    printf("%d\n", stock[PEAR]);
    return 0;
}

El tipo subyacente

En C estándar, los valores enum se almacenan en un tipo entero elegido por el compilador, normalmente int.

El tipo tiene el tamaño suficiente para contener todos los valores que defina, por lo que las constantes grandes o negativas también caben.

#include <stdio.h>
enum Big { SMALL = 0, LARGE = 1000000 };
int main(void) {
    printf("%d\n", LARGE);
    return 0;
}

No hay comprobación de rango integrada

C no impide asignar a una variable enum un valor que no pertenezca a la lista.

La asignación siguiente se compila y se ejecuta. Es responsabilidad de usted mantener válidos los valores.

#include <stdio.h>
enum Level { LOW, MID, HIGH };
int main(void) {
    enum Level x = 99;
    printf("%d\n", x);
    return 0;
}

Recorrer un rango

Cuando un enum va de 0 a un marcador COUNT, puede recorrer todos sus valores con un for sencillo.

Esto itera por cada elemento definido hasta el valor count, sin incluirlo.

#include <stdio.h>
enum Fruit { APPLE, PEAR, KIWI, FRUIT_COUNT };
int main(void) {
    for (int f = APPLE; f < FRUIT_COUNT; f++)
        printf("%d ", f);
    printf("\n");
    return 0;
}

Comprobación rápida

Razonar sobre valores enum combinados.

Resumen

Puede asignar valores enum explícitos, combinarlos con valores predeterminados, repetir valores y utilizar valores negativos.

El recurso del marcador COUNT realiza un seguimiento automático del tamaño de la lista, y los enum funcionan muy bien como índices de array. Recuerde: C no comprueba los rangos, así que debe validar los valores por su cuenta.

Preguntas frecuentes

¿La lección «Valores y rangos de enums» es gratis?

Sí — el texto completo de «Valores y rangos de enums» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Valores y rangos de enums»?

Controle los enteros subyacentes Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C Academy?

No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Valores y rangos de enums»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C Academy?

Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Definir enums
  2. Valores y rangos de enums
  3. Variables const
  4. Constantes #define
← Volver a C Academy