使用C中的索引访问枚举

使用C中的索引访问枚举,c,enums,indexing,C,Enums,Indexing,考虑: enum Test { a = 3, b = 7, c = 1 }; 我想使用索引访问枚举。大概是这样的: for (i=0; i<n; i++) doSomething((Test)i); for(i=0;i你不能这么做。C枚举只不过是一堆常量。在C#或Java枚举中没有类型安全或反射,这是你能做的最好的: enum Test { a = 3, b = 7, c = 1, LAST = -1 }; static const enum Test

考虑:

enum Test
{
    a = 3,
    b = 7,
    c = 1
};
我想使用索引访问枚举。大概是这样的:

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

for(i=0;i你不能这么做。C枚举只不过是一堆常量。在C#或Java
枚举中没有类型安全或反射,这是你能做的最好的:

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]);

您必须自己维护映射。

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


它不是可以索引的东西,也没有任何理由。您定义的实际上只是名为
a
b
c
的3个常量,它们的值分别是
3
7
1

正如其他人提到的,这不是枚举的目的按照您的要求,您可以简单地使用数组:

#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] );
}
#定义一个3
#定义b7
#定义c1
int数组[3]={a,b,c};
int i;
对于(i=0;i
为什么要两次发布相同的问题?看看这个cast,如果它有意义(或者没有意义),应该是
enum Test
是,但与enum不同,您必须为值指定一个类型。您还必须确保索引不会高于单元格数。