在全球范围内宣布枚举

时间:2010-11-04 10:30:37

标签: c

gcc 4.4.4 c89

我在state.c文件中有以下内容:

enum State {
    IDLE_ST,
    START_ST,
    RUNNING_ST,
    STOPPED_ST,
};

State g_current_state = State.IDLE_ST;

我尝试编译时遇到以下错误。

error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘g_current_state’

是否有一些在全局范围内声明了枚举类型的变量?

非常感谢任何建议,

4 个答案:

答案 0 :(得分:19)

有两种方法可以直接使用C.在任何地方使用完整的enum名称:

enum State {
    IDLE_ST,
    START_ST,
    RUNNING_ST,
    STOPPED_ST,
};
enum State g_current_state = IDLE_ST;

或(这是我的偏好)typedef它:

typedef enum {
    IDLE_ST,
    START_ST,
    RUNNING_ST,
    STOPPED_ST,
} State;
State g_current_state = IDLE_ST;

我更喜欢第二个,因为它使类型看起来像int这样的第一类。

答案 1 :(得分:2)

enum的右括号后缺少分号。顺便说一句,我真的不明白为什么缺少分号错误在gcc中如此神秘。

答案 2 :(得分:2)

State本身并不是代码段中的有效标识符。

您需要enum State或输入enum State到另一个名称。

enum State {
    IDLE_ST,
    START_ST,
    RUNNING_ST,
    STOPPED_ST,
};

/* State g_current_state = State.IDLE_ST; */
/* no State here either ---^^^^^^         */
enum State g_current_state = IDLE_ST;

/ *或* /

typedef enum State TypedefState;
TypedefState variable = IDLE_ST;

答案 3 :(得分:2)

所以有两个问题:

  1. ;定义后遗失enum
  2. 声明变量时,请使用enum State而不是State
  3. 这有效:

    enum State {
        IDLE_ST,
        START_ST,
        RUNNING_ST,
        STOPPED_ST,
    };
    
    enum State g_current_state;