从(6.2.3 / 1)C99标准
- 结构,联合和枚举的标记(通过遵循任何*关键字struct,union或enum消除歧义);
*脚注:标签只有一个名称空间,即使有三个可能。
现在,我知道在C ++中我们使用命名空间来避免实体冲突,例如:
namespace foo {
struct bar // ..define bar..
};
namespace foo2 {
struct bar // ..define bar..
};
在C中,struct,union,enum如何充当命名空间,脚注的含义是什么只有一个名称空间而不是三个?
答案 0 :(得分:3)
结构,联合和枚举的标记有一个单独的命名空间,所以你可以拥有
struct foo {
int bar;
};
double foo;
因为标记的名称空间与标识符的名称空间是分开的。标签只有一个名称空间意味着你不能拥有
struct foo {
int bar;
};
union foo {
double baz;
long quux;
}
在同一范围内。