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中这很好,除了空的结构定义。