C语言中的名称空间

C语言中的名称空间,c,namespaces,c99,C,Namespaces,C99,我有以下代码: typedef struct Y {int X;} X; enum E {X}; 这将生成一个错误: 错误:“X”重新声明为不同类型的符号 我知道,C为结构、联合和枚举标记以及它们的成员隐式定义了名称空间。所以,我不确定为什么E::X与typedef结构标签X冲突 C中的名称空间到底是什么?因为类型X在全局名称空间中声明,该名称空间随后包含enum E,而该名称空间又包含X的重新声明。发生这种情况是因为它们不在同一级别上-一个“名称空间”包含另一个。因为类型X在全局名称空间中声

我有以下代码:

typedef struct Y {int X;} X;
enum E {X};
这将生成一个错误:

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

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


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

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

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

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

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

可能知道typedef如何定义X会有所帮助!,检查是否
枚举E{Y}
枚举E{int}是否出错!,或者,
enum
结构没有创建作用域。也许知道typedef如何定义X会有帮助!,检查是否
枚举E{Y}
枚举E{int}是否出错!,或者,
enum
结构没有创建作用域。啊,你说得对。只有结构成员和联合成员具有名称空间。@user963241:在C.(1)结构标记和联合标记中实际上还有两个其他名称空间,例如
Struct标记中的
tag
。(2) 标签。@DietrichEpp:例如:
struct S{};int-S
在全局命名空间中声明,以便
标记
不会与对象
S
冲突,对吗?@user963241:对,在C中这很好,除了空的结构定义。啊,你是对的。只有结构成员和联合成员具有名称空间。@user963241:在C.(1)结构标记和联合标记中实际上还有两个其他名称空间,例如
Struct标记中的
tag
。(2) 标签。@DietrichEpp:例如:
struct S{};int-S
在全局命名空间中声明,以便
标记
不会与对象
S
冲突,对吗?@user963241:对,在C中这很好,除了空的结构定义。