#include <stdio.h>
int main(void) {
enum option {A = 0, B = 0x100000000};
// Enumerator sizes of the same enumeration can differ
printf("sizeof(A)=%zu\n", sizeof(A)); // sizeof(A)=4
printf("sizeof(B)=%zu\n", sizeof(B)); // sizeof(B)=8
// Same output even though they have different values
printf("A=%d\n", A); // A=0
printf("B=%d\n", B); // B=0
// You should know beforehand the maximum enumerator size
printf("A=%ld\n", A); // A=0
printf("B=%ld\n", B); // B=4294967296
}
static char* enumStrings[] = { /* filler 0's to get to the first value, */
"enum0", "enum1",
/* filler for hole in the middle: ,0 */
"enum2", "enum3", .... };
...
printf("The value is %s\n", enumStrings[thevalue]);
7条答案
按热度按时间polkgigr1#
0dxa2lsx2#
在这篇文章中,一些家伙提出了一个聪明的预处理器的想法
Easy way to use variables of enum types as string in C?
pcww981p3#
我也有同样的问题。
我不得不打印出颜色所在的节点的颜色:
enum col { WHITE, GRAY, BLACK };
和节点:typedef struct Node { col color; };
我尝试用
printf("%s\n", node->color);
打印node->color
,但屏幕上显示的只有(null)\n
。马古利斯的回答几乎解决了这个问题。
所以我的最终解决方案是:
pb3skfrl4#
打印一个枚举值可能会很棘手,因为它的每个成员的大小可能会因实现而异。
fbcarpbf5#
作为字符串,否。作为整数,%d。
除非你算上:
这对于像位掩码枚举这样的东西是不起作用的,这时,你需要一个哈希表或其他一些更复杂的数据结构。
swvgeqrz6#
你只需要将枚举转换为int!
输出:我的枚举值:***
rqcrx0a67#
这个问题的正确答案已经给出:不,你不能给予枚举的名称,只能给出它的值。
然而,为了好玩,这将给予你一个枚举和一个查找表,并给你一种按名称打印的方法:
main.c:
枚举h:
Enum.c
免责声明:不要这样做。