Enumérations

Les énumérations sont un moyen commode de regrouper des constantes, lorsqu’elles ont une signification voisine, ou reliée. Voici un exemple d’énumération (il s’agit des codes de valeurs des touches du pavé numérique d’un PC, qui sont des caractères étendus) :

enum carac_pave_num {
              HOME = 71, UP = 72, PGUP = 73, LEFT = 75,
              RIGHT = 77, END = 79, DOWN = 80, PGDN = 81,
              INS = 82, ANNL = 83 };

Cet ensemble permet de définir d’un coup une succession de constantes, qui sont considérées comme des entiers en réalité.

On peut également définir ainsi des constantes symboliques :

enum jour_semaine { Lundi, Mardi, Mercredi,
              Jeudi, Vendredi, Samedi, Dimanche };

Dans ce cas, comme on n’a pas précisé de valeurs, le compilateur attribue automatiquement les valeurs 0, 1, 2, ..., 6 aux constantes définies. On peut alors définir une variable de type jour_semaine :

jour_semaine js = Mercredi;

De telles écritures sont par exemple nettement plus claires dans des boucles :

for (jour_semaine js = Lundi; js <=  Dimanche; js++)
     if (js < Samedi) cout << "Au boulot !\n";
     else cout << "Dodo !\n";

Notons que cela n’empêche nullement js de sortir de l’intervalle [0..6] ; dans ce cas cependant, elle ne correspond plus aux constantes de l’énumération.

D’une façon générale, dans une énumération, on peut omettre le nom de l’énumération (créant ainsi une énumération anonyme, qui n’est donc qu’une liste de constantes) et l’initialisation de certaines constantes ; dans ce cas, chaque constante pour laquelle on n’a pas précisé de valeur vaut 1 de plus que la précédente, ou 0 si elle est la première. On aurait donc pu écrire plus simplement :

enum { HOME = 71, UP, PGUP, LEFT = 75,  RIGHT = 77,
        END = 79, DOWN, PGDN, INS, ANNL };

Dans ce cas, UP vaut 1+HOME, soit 71, etc. Les valeurs sont donc bien les mêmes. Comme l’énumération n’a pas de nom, il n’est pas possible de créer une variable ayant le type de ces constantes ; il faut utiliser une variable entière normale.

Précédent Précédent Sommaire Sommaire Suivant Suivant