2011-07-05 61 views
4

每一个项目是否有可能周期和一个枚举提取它的每一个项目值,e.g:周期的一个枚举

enum { 
    item 1 = 1, 
    item 2 = 7, 
    item 3 = 'B' 
} items; 

如果说,一个数组。可能?

+0

[C++:通过枚举迭代]的可能重复(HTTP ://stackoverflow.com/questions/261963/c-iterate-through-an-enum) – Vladimir

回答

8

你的意思是为每个枚举值构造一个元素的数组?这样你最终会得到一个数组{1, 7, 'B'}

不可能。枚举并不仅仅是一堆编译时常量。在运行时,它们实际上只是整数。编译器甚至不检查以确保你在你的枚举变量中放入了有效的值(你可以把值5放在那里,它不介意)。所以它不知道运行时可能的枚举值是什么。当然,如果你的枚举是连续的(例如,你已经为值0,1,2和3定义了一个枚举),那么你可以使用for循环来做到这一点。

2

这是不可能的,你期望的方式。假设你给一个枚举的成员分配连续的数字,那么你可以使用循环遍历这些值。不幸的是,这是你能做的最好的。有关更深入的解释,请参见this answer

3

这是不可能的。 enum的项目只是常量,打个比方可能是#define d常数:

#define item_1 1 
#define item_2 7 
#define item_3 'B' 

(警告,#defineenum不等于这只是打个比方)。

2

你可以给你的枚举项明确连续的值,如:

enum { 
    item1=0, 
    item2=1, 
    numberOfItems=2 
} myEnum; 

,然后周期

for (k=item1; k<=numberOfItems; k++) 

,但它当然是由你来确保myEnum是连续的(即包含您尝试以这种方式循环的值)。

+0

糟糕。只是看到你的更新,在这种非连续的情况下,这是不可能的 – fnokke

2

如果你需要做这在实际应用中,这是一个相当普遍的情况下,您会做以下列方式:

#define ITEM_N 3 

typedef enum 
{ 
    item1 = 1, 
    item2 = 7, 
    item3 = 'B', 
} Item_t; 

const Item_t LOOKUP_TABLE [ITEM_N] = 
{ 
    item1, 
    item2, 
    item3 
}; 

... 

for(i=0; i<ITEM_N; i++) 
{ 
    printf("%d\n", LOOKUP_TABLE[i]); 
}