C中的名称空间

use*_*241 0 c namespaces c99

我有以下代码:

typedef struct Y {int X;} X;
enum E {X};
Run Code Online (Sandbox Code Playgroud)

这会产生错误:

错误:'X'重新声明为不同类型的符号

据我所知,C隐式定义了结构,联合和枚举标记以及它们的成员的名称空间.所以,我不确定为什么会E::X碰到typedef结构标签X

C中的名称空间究竟是什么?

mel*_*ene 5

C没有为enum成员提供单独的命名空间.在编写enum {X}时,会创建一个全局常量X(可以与其他全局名称冲突,例如typedef'd tags).