Programmer en langage C
178
© Éditions Eyrolles
Les instructions suivantes sont alors tout naturellement correctes :
c1 = jaune ;
/* affecte à c1 la valeur jaune
*/
c2 = c1 ;
/* affecte à c2 la valeur contenue dans c1 */
Comme on peut s’y attendre, les identificateurs correspondant aux constantes du type couleur
ne sont pas des lvalue et ne sont donc pas modifiables :
jaune = 3 ;
/* interdit : jaune n’est pas une lvalue */
8.2 Propriétés du type énumération
Nature des constantes figurant dans un type énumération
Les constantes figurant dans la déclaration d’un type énumération sont des entiers ordinaires.
Ainsi, la déclaration précédente :
enum couleur {jaune, rouge, bleu, vert} ;
associe simplement une valeur de type int à chacun des quatre identificateurs cités. Plus précisément, elle attribue la valeur 0 au premier identificateur jaune, la valeur 1 à l’identificateur rouge,
etc. Ces identificateurs sont utilisables en lieu et place de n’importe quelle constante entière :
int n ;
long p, q ;
.....
n = bleu ;
/* même rôle que
n = 2
*/
p = vert * q + bleu ;
/* même rôle que
p = 3 * q + 2 */
Une variable d’un type énumération peut recevoir une valeur quelconque
Contrairement à ce qu’on pourrait espérer, il est possible d’affecter à une variable de type énuméré n’importe quelle valeur entière (pour peu qu’elle soit représentable dans le type int) :
enum couleur {jaune, rouge, bleu, vert} ;
enum couleur c1, c2 ;
.....
c1 = 2 ;
/* même rôle que c1 = bleu ;
*/
c1 = 25 ;
/* accepté, bien que 25 n’appartienne pas au */
/* type type enum couleur
*/
Qui plus est, on peut écrire des choses aussi absurdes que :
enum booleen { faux, vrai } ;
enum couleur {jaune, rouge, bleu, vert} ;
enum booleen drapeau ;
enum couleur c ;
.....
Delannoy Livre.book Page 178 Mercredi, 6. mai 2009 4:26 16
178
© Éditions Eyrolles
Les instructions suivantes sont alors tout naturellement correctes :
c1 = jaune ;
/* affecte à c1 la valeur jaune
*/
c2 = c1 ;
/* affecte à c2 la valeur contenue dans c1 */
Comme on peut s’y attendre, les identificateurs correspondant aux constantes du type couleur
ne sont pas des lvalue et ne sont donc pas modifiables :
jaune = 3 ;
/* interdit : jaune n’est pas une lvalue */
8.2 Propriétés du type énumération
Nature des constantes figurant dans un type énumération
Les constantes figurant dans la déclaration d’un type énumération sont des entiers ordinaires.
Ainsi, la déclaration précédente :
enum couleur {jaune, rouge, bleu, vert} ;
associe simplement une valeur de type int à chacun des quatre identificateurs cités. Plus précisément, elle attribue la valeur 0 au premier identificateur jaune, la valeur 1 à l’identificateur rouge,
etc. Ces identificateurs sont utilisables en lieu et place de n’importe quelle constante entière :
int n ;
long p, q ;
.....
n = bleu ;
/* même rôle que
n = 2
*/
p = vert * q + bleu ;
/* même rôle que
p = 3 * q + 2 */
Une variable d’un type énumération peut recevoir une valeur quelconque
Contrairement à ce qu’on pourrait espérer, il est possible d’affecter à une variable de type énuméré n’importe quelle valeur entière (pour peu qu’elle soit représentable dans le type int) :
enum couleur {jaune, rouge, bleu, vert} ;
enum couleur c1, c2 ;
.....
c1 = 2 ;
/* même rôle que c1 = bleu ;
*/
c1 = 25 ;
/* accepté, bien que 25 n’appartienne pas au */
/* type type enum couleur
*/
Qui plus est, on peut écrire des choses aussi absurdes que :
enum booleen { faux, vrai } ;
enum couleur {jaune, rouge, bleu, vert} ;
enum booleen drapeau ;
enum couleur c ;
.....
Delannoy Livre.book Page 178 Mercredi, 6. mai 2009 4:26 16
