您可以對其進行定義,但它涉及到一些不太令人愉快的鍋爐板,並且會污染全局/標記名稱空間很多/位。
如果利用臭名昭著X macros作業,它應該是這樣的:
#define LIST_OF_ENUM_IDS \
X(A, 0) \
X(B, 1) \
X(C, 2) \
X(D, 4) \
X(E, 6) \
X(F, 8) \
X(G, 10)
#define X(id, val) \
id = val,
typedef enum
{
LIST_OF_ENUM_IDS
} my_enum;
#undef X
#define X(id, val) id##_impl_helper,
enum my_enum_impl_helper__ {
LIST_OF_ENUM_IDS
MY_ENUM_MAX_ELEMENTS
};
#undef X
活生生的例子:On Ideone
另外,一些商店將轉而依靠大膽的註釋和代碼評論以趕上這樣的事情:
/********************************************
*
**
*** ATTENTION! Remember to bump MAX_ELEMENTS
*** should you add new values to the enum
**
*
********************************************/
typedef enum
{
A= 0,
B= 1,
C =2,
D= 4,
E= 6,
F= 8,
G= 10,
MAX_ELEMENTS = 7 /// Bump this if you add new values!
}my_enum;
哪個可以工作不是太糟糕,儘管是人爲因素。
是什麼'enum_size'是什麼意思? 'sizeof'會給出與MAX_ELEMENTS - 1完全不同的答案。 –
@ n.m。我的意思是枚舉中元素的數量 – JohnDoe
枚舉中的元素數量與枚舉中的最大值不同。你需要枚舉可以表示的離散事物的數量還是枚舉中的最大值? – djgandy