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
)。阅读使用匿名枚举,或简单的
#定义
。除掉工会和演员。