Usa l'enumerazione typedef in C
-
Usa
enum
per definire costanti intere con nome in C -
Usa
typedef enum
per definire il tipo personalizzato per oggetti contenenti costanti intere denominate
Questo articolo mostrerà diversi metodi su come usare typedef enum
in C.
Usa enum
per definire costanti intere con nome in C
La parola chiave enum
definisce un tipo speciale chiamato enumerazione. Le enumerazioni sono fondamentalmente solo valori integrali che hanno nomi come variabili ma sono oggetti di sola lettura e non possono essere modificati in fase di esecuzione.
Ci sono due modi per costruire un oggetto enum
; uno è dichiarare ogni membro senza assegnare un valore esplicito ma valori dedotti automaticamente in base alla posizione; l’altro è dichiarare i membri e assegnare i valori espliciti.
Nell’esempio seguente, assegniamo valori personalizzati a ciascuno di essi e denominiamo l’oggetto - STATE
. Successivamente, possiamo usare i nomi dei membri dell’oggetto STATE
nel codice come interi con segno e valutarli nelle espressioni. Il codice di esempio seguente mostra le istruzioni condizionali multiple che controllano se il numero intero di input è uguale alla costante definita e stampa la stringa adatta corrispondente una volta che viene trovata.
#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);
}
Produzione:
Please provide integer in range [1-4]: 2
Machine is stopped
Usa typedef enum
per definire il tipo personalizzato per oggetti contenenti costanti intere denominate
La parola chiave typedef
viene utilizzata per denominare gli oggetti definiti dall’utente. Le strutture spesso devono essere dichiarate più volte nel codice. Senza definirle usando typedef
ogni dichiarazione dovrebbe iniziare con la parola chiave struct
/ enum
, che rende il codice abbastanza sovraccarico per la leggibilità.
Nota però, typedef
crea semplicemente un nuovo nome alias per il tipo dato piuttosto che crearne uno nuovo. Molti tipi interi come size_t
, uint
e altri sono solo typedef
di altri tipi incorporati. Pertanto, l’utente può dichiarare più alias di nome per i tipi incorporati e quindi concatenare dichiarazioni aggiuntive typedef
utilizzando alias già creati.
#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);
}
Produzione:
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