【发布时间】:2016-11-26 20:48:02
【问题描述】:
我想键入一个枚举,它是另一个 typdef 枚举的扩展。
一个 typedef 枚举有 4 个元素(因为我在一个结构中只有 2 位来存储它的值),另一个有相同的 4 个元素,加上第 5 个元素(不存储在结构中,仅用于标记一个无效值)。
示例代码:
typedef enum {
case0,
case1,
case2,
case3,
} case_t;
typedef enum {
one_t, // 0 through 3 <---HOW CAN I DO THIS?
invalid_case, // 4
} case_ext_t
struct {
case_t case_ :2; // 2 bits, for up to 4 cases
unsigned other_stuff:14; //
} a_word;
case_ext_t my_case = invalid_case;
if (condition) {
my_case = case2;
}
if (my_case != invalid_case) {
switch (my_case) {
case case0: {....} break;
case case1: {....} break;
case case2: {....} break;
case case3: {....} break;
}
}
我可以键入一个包含 case_t 的所有元素以及其他元素的 case_ext_t 吗?
或者,我可以只定义较大的 typedef 枚举 case_ext_t,但在存储 2 位结构时只使用它的前 4 个元素吗?
【问题讨论】:
-
您可以将
enum的值扩展为另一个。将第二个enum的第一个值设置为第一个enum的最后一个值+1。然后,当您引用任何enum标识符时,它将是唯一的。虽然为什么typedef和enum让我难以理解。亲吻。 -
@Waether Vane > 为什么 typedef an enum 让我无法理解...我广泛使用它们;例如,请参阅上面的代码:我 typedef an enum 然后将其用作结构中元素的类型(而不是“无符号”)