什么是标记名称空间?

时间:2016-05-20 21:19:27

标签: c struct language-lawyer terminology

C标准说:

  

7.1.3保留标识符
  所有以下划线开头的标识符始终保留用作普通和标记名称空间中具有文件范围的标识符。

什么是“标签名称空间”?

以下是标记的名称空间吗?

struct T{};

它只是结构的类型名称吗? 这个术语是否会延续到C ++中?

2 个答案:

答案 0 :(得分:5)

来自cppreference

  如果这些标识符属于不同的类别(称为名称空间),则C允许同一标识符的多个声明同时在范围内:

     
      
  1. 标签名称空间:声明为标签的所有标识符。
  2.   
  3. 标记名称:声明为结构,联合和枚举类型名称的所有标识符。请注意,所有三种标记共享一个名称空间。
  4.   
  5. 成员名称:声明为任何一个结构或联合的成员的所有标识符。每个struct和union都会引入自己的这种名称空间。
  6.   
  7. 所有其他标识符,称为普通标识符,用于区分(1-3)(函数名称,对象名称,typedef名称,枚举常量)。
  8.   

因此,T是结构的名称,与其他“标签”位于同一名称空间中,但不在与标签相同的名称空间中。即,您可以在同一范围内拥有名为T的标签。

答案 1 :(得分:2)

  

这个术语是否会延续到C ++中?

没有。 "标记名称" C ++标准中没有提到,除了信息性附件C++ and ISO C,其中标签名称在C语境中讨论。