C、 使用枚举并集扩展枚举
我有一个这样的结构C、 使用枚举并集扩展枚举,c,C,我有一个这样的结构 typedef enum { STATE_PAUSED = 0, STATE_RUN, STATE_COUNTING, STATE_PERIODIC, } State_t; 我需要的是扩展到新的州,让sens只在本地进行。 基本上,我想有一个开关,既处理原始的我->状态和扩展一个状态 所以我想把所有的东西都包在一个地方工会里,但我不知道怎么办:) 当然,我会注意重叠的值 typedef union{ State_t Ori
typedef enum {
STATE_PAUSED = 0,
STATE_RUN,
STATE_COUNTING,
STATE_PERIODIC,
} State_t;
我需要的是扩展到新的州,让sens只在本地进行。
基本上,我想有一个开关,既处理原始的我->状态和扩展一个状态
所以我想把所有的东西都包在一个地方工会里,但我不知道怎么办:)
当然,我会注意重叠的值
typedef union{
State_t OrigState;
typedef enum {
GPS_MCU_UART_DEFAULT = 10,
}LocalState;
}State;
switch((State)(me->State))
{
case STATE_RUN:
break;
case GPS_MCU_UART_DEFAULT:
break;
}
非常感谢您的帮助。只要您不需要将枚举作为一个类型,就可以很容易地做到这一点
enum State{
STATE_PAUSED = 0,
STATE_RUN,
STATE_COUNTING,
STATE_PERIODIC,
STATE_MAX // must be last
};
enum GPS_State{
GPS_MCU_UART_DEFAULT = STATE_MAX,
GPS_FOO,
GPS_BAR
};
enum Other_State{
OS_CORGI = STATE_MAX,
OS_FOO,
OS_BAR
};
这意味着可以存储这些状态的变量必须是
int
。我不确定在强制执行类型安全性时是否有办法做到这一点。只要不需要将枚举作为类型,就可以很容易地做到这一点
enum State{
STATE_PAUSED = 0,
STATE_RUN,
STATE_COUNTING,
STATE_PERIODIC,
STATE_MAX // must be last
};
enum GPS_State{
GPS_MCU_UART_DEFAULT = STATE_MAX,
GPS_FOO,
GPS_BAR
};
enum Other_State{
OS_CORGI = STATE_MAX,
OS_FOO,
OS_BAR
};
这意味着可以存储这些状态的变量必须是
int
。我不确定在强制执行类型安全的同时是否有办法做到这一点。嗯。。。谢谢你的反对票(有人会更仔细地审查)
在C中,似乎无法扩展枚举。
多亏了这篇文章,我发现了一个非常适合我的技巧
将开关转换为int,然后将旧枚举转换为新枚举,以便:
-编译器不会抱怨缺少软件条目
-编译器不会抱怨未使用的xxx\u t
这里是我的解决方案,以防任何人需要在C中“扩展枚举”
我将投票给蒂姆,谢谢 嗯。。。谢谢你的反对票(有人会更仔细地审查) 在C中,似乎无法扩展枚举。 多亏了这篇文章,我发现了一个非常适合我的技巧 将开关转换为int,然后将旧枚举转换为新枚举,以便: -编译器不会抱怨缺少软件条目 -编译器不会抱怨未使用的xxx\u t 这里是我的解决方案,以防任何人需要在C中“扩展枚举”
我将投票给蒂姆,谢谢 尝试删除第二个出现的
typedef
,并参考一些站点。在编译器中启用所有警告和调试信息(例如,gcc-Wall-Wextra-g
)。阅读使用匿名枚举,或简单的#定义。摆脱工会和演员阵容。尝试删除第二个出现的typedef
,并参考一些网站。在编译器中启用所有警告和调试信息(例如,gcc-Wall-Wextra-g
)。阅读使用匿名枚举,或简单的#定义。除掉工会和演员。