2011-07-05 57 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]); 
}