Enum o enumerazioni in C

Gli enum, noti anche come enumerazioni, sono dei particolari tipi di dato in C che contengono un elenco di costanti, ciascuna associata ad un valore intero. Nello specifico, i valori costanti contenuti all’interno di un enum, vengono definiti precedentemente dall’utente.

Di seguito viene riportata la sintassi delle enumerazioni in C:

enum nome_enum{costante1, costante2, …};

dove enum è la keyword necessaria per definire una struttura di tipo enum, nome_enum è il nome associato all’enumerazione creata, mentre all'interno delle parentesi graffe si possono definire le costanti.

Consideriamo il seguente esempio di definizione di un enum:

enum settimana{lun, mar, mer, gio, ven, sab, dom};

In questo modo viene creato un enum di nome "settimana" contente come costanti i giorni della settimana, ciascuno associato ad un particolare valore intero che, per default, iniziano da 0 e crescono di 1 ad ogni costante, ovvero lun=0, mar=1, mer=2, ecc.. .

I valori interi associati alle costanti possono anche essere specificate durante la definizione di un enum. Ad esempio:

enum settimana{lun=5, mar=2, mer=77, gio=0, ven=1, sab=6, dom=3};

Oppure si può definire il valore iniziale, comportando la modifica automatica dei valori successivi:

enum settimana{lun=1, mar, mer, gio, ven, sab, dom};

comporta i seguenti valori: lun=1, mar=2, mer=3, ecc.. .

Nota: le costanti contenute negli enum, possono assumere anche valori non numerici.

Dichiarazione e utilizzo degli enum in C

Come nel caso delle struct o delle union, anche con gli enum dopo la loro definizione si possono dichiarare variabili di quel tipo di enum. Di seguito viene riportato un esempio di dichiarazione di variabile di tipo enum settimana:

enum settimana giorno;

oppure, è possibile dichiarare una variabile di tipo enum durante la sua definizione, come di seguito:

enum settimana{lun, mar, mer, gio, ven, sab, dom} giorno;

Dichiarata una variabile di tipo enum, si può assegnare a tale variabile una costante, o il suo associato valore, contenuta nella definizione del enum utilizzato. Ad esempio:

giorno=lun; oppure giorno=0;

Per stampare il valore associato alle costanti dell’enum, basta utilizzare una funzione come la printf con lo specificatore di formato adeguato ai valori definiti. Mentre per stampare le costanti, non essendo stringhe o particolari tipi di dato, bisogna utilizzare, per esempio, uno switch per poter stampare una stringa in base a ciascun valore associato alle costanti definite.

#include <stdio.h> enum settimana{lun, mar, mer, gio, ven, sab, dom}; int main(){     enum settimana giorno;     giorno = lun;     printf("Il valore [%d] corrisponde al giorno: ", giorno);     switch(giorno){         case 0:             printf("Lunedì");             break;         case 1:             printf("Martedì");             break;         case 2:             printf("Mercoledì");             break;     }     return 0; } // Output Il valore [0] corrisponde al giorno: Lunedì

In questo modo possiamo gestire ciascun valore che può assumere la variabile di tipo enum settimana e stampare una stringa associata.
Nota: gli enum vengono tipicamente utilizzati perché permettono di rendere più leggibile e utilizzabile il codice C.