Use typedef enum em C

Jinku Hu 12 outubro 2023
  1. Utilizar enum para definir constantes inteiras nomeadas em C
  2. Utilize typedef enum para definir o tipo de cliente para objectos que contêm constantes inteiras nomeadas
Use typedef enum em C

Este artigo irá demonstrar múltiplos métodos sobre como utilizar o typedef enum em C.

Utilizar enum para definir constantes inteiras nomeadas em C

A palavra-chave enum define um tipo especial chamado enumeração. As enumerações são basicamente apenas valores integrais que têm nomes como variáveis mas são objectos apenas de leitura e não podem ser modificados em tempo de execução.

Há duas formas de construir um objecto enum; uma é declarar cada membro sem atribuir valor explícito mas deduzindo automaticamente valores com base na posição; a outra é declarar os membros e atribuir os valores explícitos.

No exemplo abaixo, atribuímos valores personalizados a cada um deles e nomeamos o objecto - STATE. Em seguida, podemos utilizar nomes de membros do objecto STATE no código como entradas assinados e avaliá-los em expressões. O seguinte exemplo de código demonstra as múltiplas declarações condicionais que verificam se o inteiro de entrada é igual à constante definida e imprime a string adequada correspondente, uma vez que é igualado.

#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);
}

Resultado:

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

Utilize typedef enum para definir o tipo de cliente para objectos que contêm constantes inteiras nomeadas

A palavra-chave typedef é utilizada para nomear objectos definidos pelo utilizador. As estruturas têm frequentemente de ser declaradas várias vezes no código. Sem as definir utilizando typedef, cada declaração teria de começar com a palavra-chave struct/enum, o que torna o código bastante sobrecarregado para a sua legibilidade.

Note-se, no entanto, que o typedef apenas cria um novo nome alternativo para o tipo dado, em vez de criar um novo tipo. Muitos tipos inteiros como size_t, uint e outros são apenas typedef de outros tipos incorporados. Assim, o utilizador pode declarar vários pseudónimos de nomes para tipos incorporados e depois encadear declarações adicionais de typedef utilizando pseudónimos já criados.

#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);
}

Resultado:

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