c - 结构标签、联合标签和枚举标签是否具有单独的命名空间



schot的答案很好。他声称

  • 标记(结构、联合和枚举的名称(。

我认为结构、联合和枚举的标签有不同的命名空间,因此这段代码完全没问题:

// In the same scope
struct T {};
union T {};
enum T {};

但从上面的引文推断,看起来所有标签都共享同一个命名空间。是答案不够清楚还是我错了?

No.

所有标记共享相同的命名空间。因此,您不得拥有:

struct T {...};
union T {...};
enum T {...};

C11草案N1570,6.2.3标识符的命名空间明确添加了s脚注。

32( 标签只有一个命名空间,即使可能有三个。

不,它们没有单独的命名空间。标签只有一个命名空间。这意味着

struct TS{};
union TU{};
int TS, TU;

有效,而

struct T{};
union T{}; 

莫。两个T声明位于同一命名空间中。

您的问题的答案:

标记名称:声明为structsunions和枚举类型名称的所有标识符。请注意,所有三种类型的标记共享一个命名空间。

只是从参考指南中引用这一点。

在查找时,标识符的名称空间由其使用方式确定:

  • 关键字 structunionenum 后面的标识符在标记命名空间中查找。

最新更新