Bonjour a tous
je souhaite savoir quel est la difference entre enum et union en c
merci d'avance
:D
Version imprimable
Bonjour a tous
je souhaite savoir quel est la difference entre enum et union en c
merci d'avance
:D
Une enum, c'est un type entier (comme int) avec un lot de valeurs possibles.
Une union, c'est comme une structure "écrasée", où tous les champs sont au même endroit.
[EDIT] Réponse croisée avec celle de Melem
Pour compléter un peu
une enum C est un type entier qui définit un ensemble de valeurs.
Par exemple
définit le type Couleur_t avec 4 valeur dedans.Code:
1
2
3 typedef enum { Couleur_Bleu, Couleur_Rouge, Couleur_Jaune, Couleur_Vert } Couleur_t;
C'est un peu la même chose (un peu seulement sinon, les puristes vont crier à l'hérésie et je vais être brûlé vif sur le bucher de la honte :P) que de faire :
Par contre, cela permet de faire des choses plus puissantes comme par exempleCode:
1
2
3
4 #define Couleur_Bleu 0 #define Couleur_Rouge 1 #define Couleur_Jaune 2 #define Couleur_Vert 3
Dans cet exemple, le compilateur va t'obliger à passer une des valeurs du type énuméré (Couleur_Rouge ou Couleur_Jaune par exemple) à la fonction. Si tu passes 1 (ce qui peut sembler pareil, le compilateur va crier.Code:
1
2
3
4 void Dessine(cont Couleur_t CouleurTrait) { ... }
De plus, tu n'as pas le droit d'écrire
Code:
1
2 Couleur_t Couleur_Trait = Couleur_Jaune; /* OK */ Couleur_Trait++; /* ici, le compilateur va crier car cela n'a pas de sens */
Non. Une liste de constantes nommées de type int, tout au plus...
Non. Tu confonds avec le C++ ou le Pascal. Ici, le compilateur ne dira rien.Citation:
Par contre, cela permet de faire des choses plus puissantes comme par exemple
Dans cet exemple, le compilateur va t'obliger à passer une des valeurs du type énuméré (Couleur_Rouge ou Couleur_Jaune par exemple) à la fonction. Si tu passes 1 (ce qui peut sembler pareil, le compilateur va crier.Code:
1
2
3
4 void Dessine(cont Couleur_t CouleurTrait) { ... }
Si, c'est tout à fait possible (même si ça n'a pas de sens). Le typage est faible en C. Le type enum a une utilité purement documentaire. Tout au plus, un compilateur bien configuré émettra un warning si le paramètre est de type pointeur et que l'adresse passée n'est pas du bon type. Sinon, il n'y a aucun contrôle.Citation:
De plus, tu n'as pas le droit d'écrire
Code:
1
2 Couleur_t Couleur_Trait = Couleur_Jaune; /* OK */ Couleur_Trait++; /* ici, le compilateur va crier car cela n'a pas de sens */