C99标准 6.2.3 标识符的名称空间
如果一个特定标识符的多个声明在翻译单元的任何位置可见,语法上下文将消除引用不同实体的用法歧义。因此,不同类别的标识符有单独的名称空间,如下所示:
- 标号名(通过标号声明和使用的语法消除歧义);
- 结构、联合和枚举的标签(通过跟随关键字struct、union或enum中的任何一个[1]来消除歧义);
- 结构或联合的成员;每个结构或联合的成员都有一个单独的名称空间(通过使用 . 或 -> 运算符访问成员的表达式类型消除歧义);
- 所有其他标识符,称为普通标识符(在普通声明符中声明或作为枚举常量声明)。
[1] 标签只有一个名称空间,尽管可以有三个。
提前引用: 枚举说明符(6.7.2.2)、标号语句(6.8.1)、结构和联合说明符(6.7.2.1)、结构和联合成员(6.5.2.3)、标签(6.7.2.3), goto语句(6.8.6.1)。