Usar typedef enum en C

Jinku Hu 12 octubre 2023
  1. Usar enum para definir constantes enteras con nombre en C
  2. Usar typedef enum para definir el tipo de cliente para un objeto que contiene constantes enteras con nombre
Usar typedef enum en C

Este artículo demostrará múltiples métodos sobre cómo usar typedef enum en C.

Usar enum para definir constantes enteras con nombre en C

La palabra clave enum define un tipo especial llamado enumeración. Las enumeraciones son básicamente valores integrales que tienen nombres como variables pero son objetos de sólo lectura y no pueden ser modificados en tiempo de ejecución.

Hay dos formas de construir un objeto enum; una es declarar cada miembro sin asignarle un valor explícito pero deduciendo automáticamente los valores en función de la posición; la otra es declarar los miembros y asignar los valores explícitos.

En el siguiente ejemplo, asignamos valores personalizados a cada uno de ellos y nombramos el objeto - STATE. A continuación, podemos utilizar los nombres de los miembros del objeto STATE en el código como enteros con signo y evaluarlos en expresiones. El siguiente código de ejemplo demuestra las múltiples sentencias condicionales que comprueban si el entero de entrada es igual a la constante definida e imprimen la correspondiente cadena de caracteres adecuada una vez que coincide.

#include <stdio.h>
#include <stdlib.h>

enum STATE { RUNNING = 49, STOPPED = 50, FAILED = 51, HIBERNATING = 52 };

int main(void) {
  int input1;

  printf("Please provide integer in range [1-4]: ");
  input1 = getchar();

  if (input1 == STOPPED) {
    printf("Machine is stopped\n");
  } else if (input1 == RUNNING) {
    printf("Machine is running\n");
  } else if (input1 == FAILED) {
    printf("Machine is in failed state\n");
  } else if (input1 == HIBERNATING) {
    printf("Machine is hibernated\n");
  }

  exit(EXIT_SUCCESS);
}

Producción :

Please provide integer in range [1-4]: 2
Machine is stopped

Usar typedef enum para definir el tipo de cliente para un objeto que contiene constantes enteras con nombre

La palabra clave typedef se utiliza para nombrar objetos definidos por el usuario. Las estructuras a menudo tienen que ser declaradas varias veces en el código. Sin definirlas usando typedef cada declaración tendría que empezar con la palabra clave struct/enum, lo que hace que el código esté bastante sobrecargado para la legibilidad.

Tenga en cuenta, sin embargo, que typedef simplemente crea un nuevo nombre de alias para el tipo dado en lugar de crear un nuevo tipo. Muchos tipos enteros como size_t, uint y otros son simplemente typedef de otros tipos incorporados. Por lo tanto, el usuario puede declarar múltiples nombres de alias para tipos incorporados y luego encadenar declaraciones adicionales de typedef utilizando los alias ya creados.

#include <stdio.h>
#include <stdlib.h>

typedef enum {
  RUNNING = 49,
  STOPPED = 50,
  FAILED = 51,
  HIBERNATING = 52
} MACHINE_STATE;

int main(void) {
  int input1;
  MACHINE_STATE state;

  printf("Please provide integer in range [1-4]: ");
  input1 = getchar();
  state = input1;

  switch (state) {
    case RUNNING:
      printf("Machine is running\n");
      break;
    case STOPPED:
      printf("Machine is stopped\n");
      break;
    case FAILED:
      printf("Machine is in failed state\n");
      break;
    case HIBERNATING:
      printf("Machine is hibernated\n");
      break;
    default:
      break;
  }

  exit(EXIT_SUCCESS);
}

Producción :

Please provide integer in range [1-4]: 2
Machine is stopped
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook