C,用枚举的联合扩展枚举

  • 本文关键字:枚举 扩展 c
  • 更新时间 :
  • 英文 :


我有一个这样的结构

typedef enum {
STATE_PAUSED = 0,
STATE_RUN,
STATE_COUNTING,
STATE_PERIODIC,
} State_t;

我需要的是扩展到仅在本地有意义的新州。 基本上,我想要一个开关来处理原始的me->状态和扩展状态。

所以我想把所有的东西都包裹在一个地方工会里,但我无法弄清楚如何:) 当然,我会注意重叠的值。

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。我不确定在强制执行类型安全时是否有办法做到这一点。

嗯...感谢您的反对票(有人会更仔细地审查(。

似乎在 C 中您无法扩展枚举。 多亏了这篇文章,我发现了一个非常适合我的技巧 警告:未在枚举类型中评估案例?

将转换切换到 int,而不是将旧枚举转换为新枚举,因此: - 编译器不会抱怨缺少软件条目 - 编译器不会抱怨未使用的xxx_t

这是我的解决方案,以防有人需要在 C 中"扩展枚举"

typedef enum {
GPS_MCU_UART_DEFAULT = 10,
}xxx_t;

switch((int)(xxx_t)(me->State))
{
case STATE_RUN:
break;
case GPS_MCU_UART_DEFAULT:
break;

}

我会把我的一票投给蒂姆,谢谢!

最新更新