18.2. Les types énumérés : enum

Icône de l'outil pédagogique Les types énumérés : enum

 

L'énumération définit la liste complète des valeurs (entières) qui peuvent être attribuées à une variable appartenant à ce type énuméré.

On peut définir un type énuméré enum Couleur par :

enum Couleur { BLEU, BLANC, VERT, ROUGE, VIOLET } ;

ou mieux, on utilise typedef pour définir le type T_COULEUR (c'est cette définition qui sera utilisée dans toute la suite) :

typedef enum { BLEU, BLANC, VERT, ROUGE, VIOLET } T_COULEUR ;

Des variables appartenant à ce type énuméré T_COULEUR peuvent ensuite être définies par :

T_COULEUR tapis ;
T_COULEUR canape = VERT ;

Ces variables ne peuvent prendre de valeur que dans la liste BLEU, BLANC, VERT, ROUGE, VIOLET.

Les valeurs de la liste sont considérées par le compilateur comme des constantes entières ordonnées, qui valent par défaut 0, 1, 2, 3 etc. (dans l’exemple ci‐dessus, BLEU vaut 0, BLANC vaut 1 ... VIOLET vaut 4). Les variables de type énuméré appartiennent donc à un sous‐ensemble des entiers. On peut les utiliser pour faire tout ce qui est autorisé sur un entier : indice de tableau, compteur de boucle for, etc.

Si on le souhaite, on peut forcer les valeurs entières associées par le compilateur aux noms symboliques de la liste :

typedef enum { BLEU=‐1, BLANC, VERT=14, ROUGE, VIOLET } T_COULEUR ;

Dans ce cas, BLEU vaut ‐1, BLANC 0, VERT 14, ROUGE 15 et VIOLET 16.

L'utilisation des variables de type énuméré ne peut faire appel qu'aux valeurs de la liste, ce qui rend les programmes très lisibles (en particulier grâce à l’instruction switch).

 


 

Voici un dernier exemple qui permet de définir un type énuméré caractérisant les jours de la semaine : 


 

Le seul inconvénient des types énumérés se situe lors des entrées/sorties conversationnelles (printf, scanf) : il n’existe pas de codes formats pour ces types, en dehors des codes formats entiers bien sûr utilisables. Il est donc nécessaire, si on veut voir s’afficher « Vert » à l’écran au lieu de la valeur entière 14 associée à la valeur énumérée VERT , de créer des fonctions de lecture ou d’affichage qui convertissent une valeur du
type énuméré en la chaîne de caractères correspondante et réciproquement (utilisation de switch ou d’un tableau de chaînes de caractères).

 

Exemple 109 : Affichage des valeurs d’un type énuméré

Affichage obtenu :