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