Bonjour a tous
je souhaite savoir quel est la difference entre enum et union en c
merci d'avance
![]()
Bonjour a tous
je souhaite savoir quel est la difference entre enum et union en c
merci d'avance
![]()
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.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
[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 : Sélectionner tout - Visualiser dans une fenêtre à part
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) que de faire :
Par contre, cela permet de faire des choses plus puissantes comme par exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void Dessine(cont Couleur_t CouleurTrait) { ... }
De plus, tu n'as pas le droit d'écrire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Couleur_t Couleur_Trait = Couleur_Jaune; /* OK */ Couleur_Trait++; /* ici, le compilateur va crier car cela n'a pas de sens */
Raymond
Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi
CafuroCafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
e-verbeUn logiciel de conjugaison des verbes de la langue française.
Ma page personnelle sur DVP.
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.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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.De plus, tu n'as pas le droit d'écrire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Couleur_t Couleur_Trait = Couleur_Jaune; /* OK */ Couleur_Trait++; /* ici, le compilateur va crier car cela n'a pas de sens */
Partager