使用C中的索引访问枚举

考虑:

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

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

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

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

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

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

你必须自己维护映射。

你的问题表明你并不真正理解枚举的含义。

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

你不能这样做。 AC enum不仅仅是一堆常量。 在C#或Java enum没有类型安全或reflection。

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

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