schot's answer是个好人。他声称
- 标签(结构,联合和枚举的名称)。
我认为结构,联合和枚举的标签有不同的名称空间,所以这段代码完全正常:
// In the same scope
struct T {};
union T {};
enum T {};
但从上面的引文推断,看起来所有标签共享相同的命名空间。答案不够清楚,还是我错了?
答案 0 :(得分:4)
没有
所有标签共享相同的命名空间。所以你不被允许:
struct T {...};
union T {...};
enum T {...};
C11 draft N1570, 6.2.3 Name spaces of identifiers明确添加了脚注。
32)标签只有一个名称空间,即使有三个可能。
答案 1 :(得分:1)
不,他们没有单独的命名空间。标签只有一个命名空间。这意味着
struct TS{};
union TU{};
int TS, TU;
是有效的
struct T{};
union T{};
不是。 T
的两个声明位于同一名称空间中。
答案 2 :(得分:1)
你的问题的答案:
标记名称:声明为structs
,unions
和枚举类型名称的所有标识符。请注意,所有三种标记共享一个名称空间。
只需引用reference guide。
在查找时,标识符的名称空间由其使用方式决定:
- 标记名称空间中会查找关键字
struct
,union
或enum
后面的标识符。