C中的语法错误

R__*_*R__ 1 c enums

 5 enum state {ST_BEFORE_KEY, ST_IN_KEY, ST_BEFORE_VALUE, ST_TERM, ST_ERR};
  6 
  7 typedef struct {
  8   state st;
      ...
Run Code Online (Sandbox Code Playgroud)

以上代码报告:

error: expected specifier-qualifier-list before ‘state’
Run Code Online (Sandbox Code Playgroud)

使用枚举类型有什么问题?

Jen*_*edt 9

使用enum state或包括typedef enum state state.

枚举标记在C中与标识符(变量,函数或typedef)不同.


cni*_*tar 6

尝试

enum state {ST_BEFORE_KEY, ST_IN_KEY, ST_BEFORE_VALUE, ST_TERM, ST_ERR};

typedef struct {
    enum state st;
    ...
};
Run Code Online (Sandbox Code Playgroud)

与此FAQ条目边缘链接.这里是关于名称空间的讨论.

有四种不同的命名空间,用于:

  • 标签(即转到目标);
  • 标签(结构,联合和枚举的名称;即使理论上它们可能是这三个也不是分开的);
  • 结构/联合成员(每个结构或联合一个名称空间); 和
  • 其他一切(函数,变量,typedef名称,枚举常量),标准称为"普通标识符".

编辑

由于OP要求一个例子..

struct foo {
    int bar;
    int foo;
};

struct bar {
    int foo;
    struct foo bar;
};
Run Code Online (Sandbox Code Playgroud)