##### 命名空间 - 命名空间 - **命名空间**用于区分不同种类的[[C.标识符|标识符]], C 语言没有显式的命名空间机制, 但它通过不同的标识符类型隐含地使用了多个命名空间, 允许某些标识符在同一[[C.作用域|作用域]]中具有相同的名称, 但不互相冲突 - 语法 - `标签名称的标识符` - [[C.goto 和标记语句|goto 和标记语句]]的标签在独立的命名空间中, 和其他名称不会冲突 - `结构体, 联合体及枚举类型名称的标识符` - 这些类型名称的标识符在独立的命名空间中, 和其他名称不会冲突 - `结构体或联合体成员的标识符` - 这些类型里成员的标识符在独立的命名空间中, 和其他名称不会冲突 - `通常标识符` - 变量名, 函数名, typedef 名, 枚举常量在独立的命名空间中, 和其他名称不会冲突 - 示例 ```c // 标签名称的标识符 void func() { int myLabel = 0; goto myLabel; myLabel: // myLabel 不会冲突 myLabel = 10; printf("%d\n", myLabel); } // 结构体, 联合体及枚举类型名称的标识符 struct MyStruct { int a; }; int MyStruct = 10; // MyStruct 变量名与结构体名不冲突 // 结构体或联合体成员的标识符 struct MyStruct { int MyStruct; // MyStruct 成员名与结构体名不冲突 }; // 通常标识符 int myVar = 10; void myVar() { // 错误:函数名不能与变量名相同 } ```