Enumération (ou enum) en C
Énumération (ou enum) est un type de données défini par l'utilisateur en C. Il est principalement utilisé pour attribuer des noms à des constantes entières. Ces noms facilitent la lecture et la maintenance d'un programme.
Le mot-clé ‘enum’ est utilisé pour déclarer de nouveaux types d’énumération en C et C++. Voici un exemple de déclaration enum.
- Ici, le nom de l'énumération est flag
- const1, const2, ...., constN sont des valeurs de type flag.
Par défaut, const1 est 0, const2 est 1 et ainsi de suite. Vous pouvez modifier les valeurs par défaut des éléments enum lors de la déclaration (si nécessaire).
Exemple 1 :
enum Etat {Vrai = 1, Faux = 0};
Déclaration de type énuméré
Lorsque vous créez un type énuméré, seul le schéma pour la variable est créé. Voici comment vous pouvez créer des variables de type enum.
Exemple 2 :
enum boolean{ Vrai, Faix }; enum boolean etat;
Ici, une variable etat de type enum boolean est créée.
Voici un autre moyen de déclarer la même variable etat en utilisant une syntaxe différente.
Exemple 3 :
enum boolean{ Vrai, Faix }etat;
Exemple 4 :
#include < stdio.h> enum semaine { dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi }; int main(void){ enum semaine jour; jour=mercredi; printf("le jour est : %d \n", jour); printf("le numéro du jour suivant est : %d \n", jour + 1); return 0; }
le numéro du jour suivant est : 4
Pourquoi les enums sont-ils utilisés?
La variable enum ne prend qu'une valeur sur de nombreuses valeurs possibles. Exemple pour le démontrer,
Exemple 5 :
#include < stdio.h> enum etat { pret=0, elu=1, bloque=2 }; int main(void){ enum etat p1; p1=elu; printf("la taille de p1 est : %d octets \n", sizeof(p1)); return 0; }
C'est parce que la taille d'un entier est de 4 octets. Cela fait enum un bon choix pour travailler avec des drapeaux.
Faits intéressants sur l'initialisation de enum.
Deux noms enum peuvent avoir la même valeur. Par exemple, dans le programme C suivant, les valeurs "pret" et "elu" ont la même valeur 0.
Exemple 6 :
#include < stdio.h> enum etat { pret=0, elu=0, bloque=1 }; int main(void){ printf("%d - %d - %d",pret,elu,bloque); return 0; }
Si nous n'attribuons pas explicitement de valeurs à des noms enum, le compilateur affecte par défaut des valeurs à partir de 0. Par exemple, dans le programme C suivant, dimanche obtient la valeur 0, lundi vaut 1, etc.
Exemple 7 :
#include < stdio.h> enum semaine { dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi }; int main(void){ enum semaine jour; jour=mercredi; printf("le jour est : %d \n", jour); return 0; }
Exemple 8 :
#include < stdio.h> enum semaine { dimanche, lundi, mardi, mercredi, jeudi, vendredi, samedi }; int main(void){ enum semaine jour; jour=mercredi; printf("le jour est : %d \n", jour); return 0; }
La valeur attribuée aux noms d’énumération doit être une constante entière, c’est-à-dire qu’elle doit être comprise dans la plage allant de la valeur entière minimale possible à la valeur maximale possible.
Toutes les constantes enum doivent être uniques dans leur portée. Par exemple, le programme suivant échoue lors de la compilation.
Exemple 9 :
enum state { working, failed }; enum result { failed, passed }; int main() { return 0; }