B.6 存储类和作用域
术语存储类指的是编译器为变量分配内存的一种方式,并且指的是特定函数或方法定义的作用域。存储类的类型为auto、static、extern和register。存储类可以在声明中省略,并指派默认的存储类。有关这方面的内容将在后面讨论。
术语作用域指的是程序中特定标识符的含义的范围。定义在所有函数、方法或语句块(此处称作BLOCK)之外的标识符,随后可以在文件中的任何位置引用。定义在BLOCK中的标识符,对于该BLOCK而言是本地的,并且可以在其中重新定义在其外部定义的标识符。标签的名称在整个BLOCK中都是已知的,形参名称也是一样。标签、实例变量、结构和结构成员名,联合和联合名称以及枚举类型名不必相互区分,也没有必要和变量、函数或方法名区分开。然而,枚举标识符却要与定义在同一作用域内的变量名和其他枚举标识符区分。具有全局作用域的类名也会因为其他的全局特性而必须与同一作用域内的其他变量和类型名区分。
B.6.1 函数
如果在定义函数时指定一个存储类,它必须是static或extern。声明为static的函数只能在包含该函数的同一文件中引用。指定为extern的函数(或未指定类的函数)可以被其他文件中的函数或方法调用。