gpt4 book ai didi

c - 如何定义枚举的大小减去一个元素

转载 作者:太空宇宙 更新时间:2023-11-04 06:16:55 24 4
gpt4 key购买 nike

如果我有枚举:

typedef enum
{
A= 0,
B= 1,
C =2,
D= 4,
E= 6,
F= 8,
G= 10,

MAX_ELEMENTS
}my_enum

如何在没有一个元素的情况下声明 enum 中的元素数量?

像这样:

uint8 enum_numb_elements = MAX_ELEMENTS - 1

这不是对枚举 进行算术运算的好习惯。还有别的办法吗?

最佳答案

你可以定义它,有点,但它涉及一些不太令人愉快的样板,并且会大量/位地污染全局/标签命名空间。

如果你利用臭名昭著的 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;

尽管存在人为因素,但可以工作得还不错。

关于c - 如何定义枚举的大小减去一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43468381/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com