使用C中的索引访问枚举

时间:2012-04-19 16:43:54

标签: c enums indexing

考虑:

enum Test
{
    a = 3,
    b = 7,
    c = 1
};

我想使用索引访问枚举。像这样:

for (i=0; i<n; i++)
    doSomething((Test)i);

我怎么能做这样的事情,我可以使用索引访问枚举,虽然枚举的成员有不同的值?

4 个答案:

答案 0 :(得分:11)

这是你能做的最好的事情:

enum Test { a = 3, b = 7, c = 1, LAST = -1 };
static const enum Test Test_map[] = { a, b, c, LAST };

for (int i = 0; Test_map[i] != LAST; i++)
    doSomething(Test_map[i]);

您必须自己维护映射。

答案 1 :(得分:5)

您的问题表明您并不真正了解枚举的用途。

这不是可以编入索引的东西,也没有任何理由可以。您定义的实际上只有3个名为abc的常量,其值为371分别

答案 2 :(得分:3)

你做不到。 C enum不仅仅是一堆常量。您可能无法在C#或Java enum中获得类型安全或反射。

答案 3 :(得分:2)

正如其他人提到的,这不是枚举的目的。为了做你想要的,你可以简单地使用一个数组:

#define a 3
#define b 7
#define c 1

int array[3] = { a, b, c };
int i;

for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ ) {
    doSomething( array[i] );
}