我想在union中引用一个类型。我有以下代码:
typedef union
{
typedef enum DIGITS_T
{
DIGIT_1 = 0,
DIGIT_2 = 1,
DIGIT_3 = 2,
DIGIT_4 = 3
} DIGITS;
typedef enum SEGMENTS_T
{
SEG_1 = 0,
SEG_2 = 1,
SEG_3 = 2,
SEG_4 = 3,
SEG_5 = 4,
SEG_6 = 5,
SEG_7 = 6,
SEG_8 = 7
} SEGMENTS;
} DISPLAY_1;
我希望能够执行DISPLAY_1.DIGITS或DISPLAY1.SEGMENTS之类的操作,但是在访问DISPLAY1时,我只会看到DIGIT_1,DIGIT_2,DIGIT_3,DIGIT_4,SEG_1,SEG_2等列表。
是否有可能做我正在追求的事情或者我没有正确使用工会?
谢谢!
答案 0 :(得分:1)
即使看起来我对某些人的原始问题不够清楚,但Eugene Sh能够回答它。
基本上我有两个typedef枚举的DIGITS和SEGMENTS。我需要一种方法将这些一般应用于显示DISPLAY_1和DISPLAY_2,它们是工会。因此,我可以使用DISPLAY_1.DIGITS或DISPLAY_1.SEGMENTS访问显示1或显示2的数字或段。这是有效的,除了我需要能够使用枚举类型的switch语句。
所以我需要做的是在联合之外定义我的枚举枚举,然后将它们作为联合内部的项引用。我的代码发布在下面。
枚举:
typedef enum DIGITS_T
{
DIGIT_1 = 0,
DIGIT_2 = 1,
DIGIT_3 = 2,
DIGIT_4 = 3,
DIGIT_NOTHING = 4
}DIGITS;
typedef enum SEGMENTS_T
{
SEG_1 = 0,
SEG_2 = 1,
SEG_3 = 2,
SEG_4 = 3,
SEG_5 = 4,
SEG_6 = 5,
SEG_7 = 6,
SEG_8 = 7,
SEG_NOTHING = 8
} SEGMENTS;
联盟:
typedef union
{
DIGITS Digits;
SEGMENTS Segments;
} DISPLAY_1;
typedef union
{
DIGITS Digits;
SEGMENTS Segments;
} DISPLAY_2;
typedef union
{
DISPLAY_1 Display_1;
DISPLAY_2 Display_2;
} DISPLAYS;
示例用法:
void Clear_Digit(DISPLAYS display, DIGITS passed_digit)
{
switch(display)
{
case DISPLAYS.Display_1:
switch(passed_digit)
{
case DIGIT_1:
break;
case DIGIT_2:
break;
case DIGIT_3:
break;
case DIGIT_4:
break;
}
break;
case DISPLAYS.Display_2:
switch(passed_digit)
{
case DIGIT_1:
break;
case DIGIT_2:
break;
case DIGIT_3:
break;
case DIGIT_4:
break;
}
break;
}
}