是否可以将枚举字段的值增加固定数量?
说我是否有枚举
typedef enum {
VAL_A,
VAL_B,
VAL_C
}ENUM_X;
我想以这样的方式定义枚举:值可以增加一个固定的数字(默认值不是1)。这会导致我(比如说数字是4)
VAL_A = 4; VAL_B = 8; VAL_C = 12;
如果上述答案为真,并且有任何此类机制,是否可以使值按顺序递增?
说我重新定义了相同的枚举
typedef enum {
#ifdef A
VAL_A,
#endif
#ifdef B
VAL_B,
#endif
#ifdef C
VAL_C,
#endif
VAL_END
}ENUM_X;
如果对于上面的枚举我定义了A和C,我应该得到
VAL_A = 4; VAL_C = 8;
但如果我只定义B和C,我应该得到
VAL_B = 4; VAL_C = 8;
如果我定义所有A,B和C,我应该
VAL_A = 4; VAL_B = 8; VAL_C = 12;
答案 0 :(得分:4)
不,这种语言没有这样的支持。
当然,使用宏可能会做一些或多或少可怕的事情。我认为整个"自动"部分很麻烦,但是当有足够的动力时,人们可以提出最麻烦的预处理器结构。
答案 1 :(得分:0)
枚举与#define
非常相似。其中一个优点是它们使代码可读。而不是魔术数字遍布代码,最好有一个数字的名称。
对于编译器,它只会在操作期间用相关的数字替换名称。
没有固定数字“自动增加”的选项,您可以采用以下方法:
#define INCREMENT_ENUM_BY_NUM 4
typedef enum {
VAL_A = 0 + INCREMENT_ENUM_BY_NUM,
VAL_B = VAL_A + INCREMENT_ENUM_BY_NUM,
VAL_C = VAL_B + INCREMENT_ENUM_BY_NUM,
}ENUM_X;
如果您的枚举值经常更改,这将非常有用。但是与#ifdef
的第二部分一样,这是不可行的,因为每次都必须更改代码。
我们有一个案例,根据客户要求更改了一些枚举。所以改变那些枚举,构建和交付。在那里,这个apporach是有用的。 但总的来说,这更好 -
typedef enum {
VAL_A = 4,
VAL_B = 8,
VAL_C = 12
}ENUM_X;
答案 2 :(得分:0)
这是一个解决方案。即使只定义了3个枚举中的一个,这也会起作用。
#define INCREMENT_VALUE 4
#define VALUE 4
#define VALTEMP 4
#define INCR_OPERATION \
#undef VALTEMP \
#define VALTEMP VALUE \
#undef VALUE \
#define VALUE (VALTEMP+ INCREMENT_VALUE) \
typedef enum {
#ifdef A
VAL_A = VALUE,
INCR_OPERATION
#endif
#ifdef B
VAL_B = VALUE,
INCR_OPERATION
#endif
#ifdef C
VAL_C = VALUE,
INCR_OPERATION
#endif
VAL_END = VALUE
}ENUM_X;