如何枚举C中的所有enum
名称和值以将其打印为
printf("Name: %s, value: %d\n", name, value);
答案 0 :(得分:5)
结帐the X macro:
#define COLORS \
X(Cred, "red") \
X(Cblue, "blue") \
X(Cgreen, "green")
#define X(a, b) a,
enum Color { COLORS };
#undef X
#define X(a, b) b,
static char *ColorStrings[] = { COLORS };
#undef X
printf("%s\n", ColorStrings[Cred]); // output: red
答案 1 :(得分:2)
你不能,至少不能直接。但是有一些解决方案。
首先,如果您实际上不需要名称,只要值是连续的,您就可以在枚举中使用结束标记:
enum my_vals { FIRST, SECOND, LAST_my_vals };
...
for (enum my_vals it = FIRST ; it < LAST_my_vals ; ++it) {
....
}
但如果你确实需要这些名字,你可以改编这个问题:Get enum value by name
然后你将拥有一个包含所有值的数组,并且可以迭代数组。