命名空间可分为以下几类:
语句标号单独属于一个命名空间。例如在函数中局部变量和语句标号可以重名,互不影响。
由于使用标号的语法和使用其它标识符的语法都不一样,编译器不会把它和别的标识符弄
混。
struct, enum和union(下一节介绍union)的类型Tag属于一个命名空间。由于Tag前面总是
带struct, enum或union关键字,所以编译器不会把它和别的标识符弄混。
struct和union的成员名属于一个命名空间。由于成员名总是通过.或->运算符来访问而不会
单独使用,所以编译器不会把它和别的标识符弄混。
所有其它标识符,例如变量名、函数名、宏定义、 typedef的类型名、 enum成员等等都属于
同一个命名空间。如果有重名的话,宏定义覆盖所有其它标识符,因为它在预处理阶段而不是
编译阶段处理,除了宏定义之外其它几类标识符按上面所说的规则处理,内层作用域覆盖外
层作用域。