如何在枚举对象中选择第i个元素

时间:2014-12-03 14:42:47

标签: c enums

有没有办法从我的枚举对象中选择指定的第一个枚举?

例如:

enum keys_t = {P, Pv, Pr, Pd, U, I, S, proc, R, H, A, sqrt, plus, minus, mult, equal, none, error};

现在我想调用元素编号i。

1 个答案:

答案 0 :(得分:2)

如果enum未明确指定数字,您可以将i投射到enum keys_t以获取值:

enum keys_t ithValue = (enum keys_t)i;

但是,一般情况下,当您明确指定值时,不支持获取i - 值:您需要为此构建一个数组:

enum keys_t {P=2, Pv=3, Pr=5, Pd=7, U=11, I=13, S=17, proc=19, R=23, H=29, A=31, sqrt=37, plus=41, minus=43, mult=47, equal=53, none=0, error=59};
enum keys_t keyT_vals[] = {P, Pv, Pd, U, ...}; // ...and so on
...
enum keys_t ithValue = keyT_vals[i];

如果要获取第i个枚举值的名称,则需要创建一个字符串数组,并将其与枚举分开维护。您可以使用“stringize”宏:

#define STR(x) #x

enum keys_t {P, one, error, ...};
char *keys_t_names[] = {STR(P), STR(one), STR(error), ...};
...
char *ithName = keys_t_names[i];

Demo.