枚举C中的所有枚举名称/值

时间:2013-11-17 15:19:03

标签: c enums

如何枚举C中的所有enum名称和值以将其打印为

printf("Name: %s, value: %d\n", name, value);

2 个答案:

答案 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

然后你将拥有一个包含所有值的数组,并且可以迭代数组。