Puis-je afficher la valeur d'un enum avec printf()?
Est-il un one-liner qui me permet de la sortie de la valeur actuelle d'un enum?
Vous devez vous connecter pour publier un commentaire.
Est-il un one-liner qui me permet de la sortie de la valeur actuelle d'un enum?
Vous devez vous connecter pour publier un commentaire.
Comme une chaîne de caractères, pas de. Comme un entier, %d.
Sauf si vous comptez:
Cela ne fonctionne pas pour quelque chose comme une énumération des masques de bits. À ce stade, vous avez besoin d'une table de hachage ou une autre plus élaborée structure de données.
Vous avez juste à jeter enum pour int !
Sortie : Mon enum Valeur : 2
enum MyEnum c = C_ENUM_VALUE;
et en passant ensuitec
, il aurait besoin de la fonte. Voir la discussion ci-dessous sur @Neil réponse.La bonne réponse à ce qui a déjà été donné: non, vous ne pouvez pas donner le nom d'un enum, que c'est la valeur.
Néanmoins, juste pour le plaisir, ce qui vous donnera une énumération et une recherche-table tout en un, et vous donne un moyen d'impression par son nom:
principal.c:
Enum.h:
Enum.c
Avertissement: ne pas le faire.
int
. (Une variable d'énumération peut être compatible aveclong
, par exemple, très bien). printf du langage%d
souhaite cependant exactement type deint
, donc une fonte est le mieux à faire, je pense. Seuls les agents recenseurs (l'un dans la liste dans la déclaration) sont exactement du typeint
.long
ou quelque chose, alors pas de valeur par défaut de la promotion qui se passe.bool
ouchar
en C++, qui sont les types integer, mais ni un "entier signé" l'un ni un "unsigned integer" (même thochar
est soit signé ou non signé). La matière est un peu compliqué, je pense.-C_ENUM_VALUE
est appelé "agent recenseur", et en C, il a toujours de typeint
. Maisa
est une variable d'énumération, et il a le type de l'énumération. Mais en C, les types peuvent être compatibles (ce qui signifie que vous pouvezT *t = &some_u
siU
etT
sont compatibles, parmi d'autres choses). De nombreuses règles sont exprimés uniquement en termes de compatibilité au lieu de l'égalité de traitement. Un type d'énumération est compatible avecchar
ou un signés ou non signés type intégral. Vous ne savez pas, et il est préférable de ne pas faire d'hypothèses sur elle.Un mec est venu avec une puce de préprocesseur idée dans ce post
Moyen facile d'utiliser des variables de types enum comme une chaîne de caractères en C?
J'ai eu le même problème.
J'ai eu d'impression de la couleur des nœuds où la couleur était:
enum col { WHITE, GRAY, BLACK };
et le nœud:typedef struct Node { col color; };
J'ai essayé d'imprimer
node->color
avecprintf("%s\n", node->color);
mais tout ce que j'ai sur l'écran était(null)\n
.La réponse bmargulies a presque résolu le problème.
Ma dernière solution est la suivante:
printf("%s\n", enumStrings[node->color]);
Comme vous en avez maintenant accès à l'ensemble lui-même pour trouver le correspondant de la chaîne.