0

我有以下代码:

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

这会产生错误:

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

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

C 中的名称空间到底是什么?

4

2 回答 2

5

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

于 2012-11-24T21:50:41.940 回答
0

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

于 2012-11-24T21:43:07.997 回答