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’
是否有一些在全局范围内声明了枚举类型的变量?
非常感谢任何建议,
答案 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)
所以有两个问题:
;
定义后遗失enum
。enum State
而不是State
。这有效:
enum State {
IDLE_ST,
START_ST,
RUNNING_ST,
STOPPED_ST,
};
enum State g_current_state;