Un type énumération est un ensemble de constantes nommées :
enum jour { lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche };
enum jour aujourdhui, demain;
|
Ce qui définit deux variables
aujourdhui et
demain pouvant prendre
pour valeur l'une des constantes énumérées, ce qui peut s'écrire aussi :
enum { lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche } aujourdhui, demain;
|
Mais l'absence de nom de type rend impossible une déclaration ultérieure d'autres variables de
même type.
L'affectation de ces variables s'effectue normalement :
aujourdhui = lundi;
demain = mardi;
|
Une valeur entière est en fait associée séquentiellement à chaque constante, en commençant à 0 :
0 est associé à
lundi, 1 à
mardi etc... Ainsi l'affectation et la comparaison
de constantes d'énumération n'est rien d'autre qu'une affectation et une comparaison d'entiers.
demain = aujourdhui + 1; est syntaxiquement correct, mais ne donne pas le résultat souhaité lorsque
la variable
aujourdhui a pour valeur
dimanche.
 |
Attention au conflit de noms, cette déclaration est incorrecte : |
char dimanche[10];
enum jour { lundi, mardi, mercredi, jeudi, vendredi, samedi, dimanche };
|
Par contre :
{
...
char dimanche[10];
}
|
est correct puisque la variable
dimanche masque, dans le bloc, la constante de même
nom.
Des valeurs peuvent être imposées aux constantes, ce qui réajuste la distribution séquentielle des
valeurs :
enum piece { fou = 2, pion = 1, cavalier, tour, reine, roi = 100 };
|
enum piece est le nom du nouveau type et peut être employé comme tout autre type :
enum piece *blanc;
blanc = (enum piece *) malloc (16 * sizeof(enum piece));
|
L'utilisation de
typedef permet d'alléger les notations :
typedef enum piece PIECE;
PIECE *blanc;
blanc = (PIECE *) malloc (16 * sizeof(PIECE));
|