Use typedef enum em C
-
Utilizar
enum
para definir constantes inteiras nomeadas em C -
Utilize
typedef enum
para definir o tipo de cliente para objectos que contêm constantes inteiras nomeadas
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
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