Comment cast / affectez une valeur d'énumération à l'autre enum
J'ai 2 enums en 2 modules différents qui ont exactement la même valeur définie. Comment puis-je jeter un à l'autre?
typedef EnumA{
a_dog = 0,
a_cat = 1
} EnumA;
typedef EnumB{
b_dog = 0,
b_cat = 1
} EnumB;
EnumA a = a_dog;
EnumB b;
b = a;
Une telle cession entraîne un avertissement: type énuméré mélangé avec un autre type
Puis-je éviter les cas de commutateur par typecasting, comme, disons,
b = (int)a;
ou
b = (EnumB)a;
- Avez-vous essayé de tout cela?
- Si les deux ont exactement la même valeur définie, pourquoi avez-vous avez tous les deux définis à tous? Il suffit de définir l'un et l'utiliser dans les deux modules. De toute façon, en jetant un enum pour un autre n'est pas toujours une bonne idée. Il devrait fonctionner, cependant.
- Le compilateur ou de l'outil (avec quelles options) provoque l'avertissement? Il n'y a pas requis par la norme (et
gcc -std=c99 -pedantc -Wall -Wextra
n'émet pas un). - Je n'ai pas essayé non plus. J'utilise gmake
Vous devez vous connecter pour publier un commentaire.
J'ai fait un code qui fonctionne à partir de votre question. Vous avez manqué la
enum
de votre définitions de type.Le code
b = a
fonctionne aussi correctement sans le cast. Aussib = (int) a;
est de travailler au moins en C11, becuseenum
s sont vraiment juste des entiers. De toute façon, à mon humble avis il est de bonne pratique de faire un cast explicite.enum
types sont des types d'entiers et vous permet d'assigner une valeur de type entier entier quelconque objet.Ceci est valable et aucun diagnostic n'est requis par la Norme. Néanmoins, certaines implémentations avertir lorsque vous essayez de mélanger différents
enum
types.En mode silencieux, l'avertissement, le mieux est de ne pas mélanger les types enum, mais sinon, je vous recommande de jeter type enum.
Sauf si votre compilateur est vraiment intelligente, ce:
devrait aussi fonctionner comme
enum
constante sont de typeint
et le compilateur n'est pas censé avertir lorsque le droitenum
constante (typeint
) est affecté à la droite associéeenum
type.