C中的名称空间

时间:2012-11-24 21:40:20

标签: c namespaces c99

我有以下代码:

typedef struct Y {int X;} X;
enum E {X};

会产生错误:

  

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

据我所知,C隐式定义了结构,联合和枚举标记以及它们的成员的名称空间。所以,我不确定为什么E::X会与typedef结构标记X发生冲突?

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

2 个答案:

答案 0 :(得分:5)

C没有enum成员的单独命名空间。当您编写enum {X}时,会创建一个全局常量X(可能会与其他全局名称冲突,例如typedef'd标记)。

答案 1 :(得分:0)

因为类型X是在全局命名空间中声明的,然后包含enum E,反过来又包含X的重新声明。所以这发生是因为它们不在同一级别 - 一个“命名空间”包含另一个。