獲取信息,我有2種枚舉類型:上枚舉類型
typedef enum {a=0, a1=3, a2=5} NX;
typedef enum {c=-1, c1=4, c2=7} NY;
我想編寫一個表達式,枚舉類型的給定一個名稱/實例將返回我的第一個元素的值。一個可能的解決方案是始終添加固定名稱元素,例如
typedef enum {a=0, first=a, a1, a2, last=a2}
但是,也許有一種更優雅的方式。
有沒有辦法在運行時獲取枚舉中的元素數量?
獲取信息,我有2種枚舉類型:上枚舉類型
typedef enum {a=0, a1=3, a2=5} NX;
typedef enum {c=-1, c1=4, c2=7} NY;
我想編寫一個表達式,枚舉類型的給定一個名稱/實例將返回我的第一個元素的值。一個可能的解決方案是始終添加固定名稱元素,例如
typedef enum {a=0, first=a, a1, a2, last=a2}
但是,也許有一種更優雅的方式。
有沒有辦法在運行時獲取枚舉中的元素數量?
不,sizeof()
不適用於枚舉的。在運行時不可能獲取元素的數量。
有一個流行的方法來檢查枚舉的最後一個元素值,以確定在給定的枚舉元素的量,即:
enum Type {A = 0, B, C, LAST};
printf("'Type' enum has %d number of elements", LAST);
當然,這僅適用於順序枚舉。 – 2012-08-16 10:16:20
注意:對於第一個元素爲0 **的順序枚舉**有效。 – rpsml 2012-08-16 10:25:34
是的,但這可以很容易地計算出來,正如你在答案中指出的一樣。 – 2012-08-16 11:08:38
如果枚舉的數字是連續的(和你的前兩個例子,他們是)您可以隨時使用
typedef enum {first = -18, b, c, d, last } BlahBlah;
(...)
int nptElements = last - first + 1;
獲取元素的數量。當然,這需要第一個和最後一個知識...
C++的相同問題:[鏈接](http://stackoverflow.com/a/159018/335858)。總結:你的方法就是答案。 – dasblinkenlight 2012-08-16 10:09:40