1. 标识符的作用域(scope)

标识符的作用域决定了标识符在本编译单元的可见范围(哪里可以被使用)。

1.1 block scope(代码块作用域)

位于一对花括号之间的所有语句被称为一个代码块(block)。任何在block内声明的标识符都拥有代码块作用域(block scope),这表示标识符从它们声明之初到其所在block结尾都是可见的。当block于嵌套状态时,声明于内层block的标识符的作用域到达该内层block结尾便告终止。

1.2 file scope(文件作用域)

处在所有代码块之外的标识符具有文件作用域(file scope),这表示标识符从它们声明之初到其所在文件的结尾处都是可见的。

原型作用域(prototype scope)函数作用域(function scope)这两个概念很少用到,或者我本人没有认识到它们的重要性,本着面向实际工程而非刻板地学习语言标准的原则,此处略过。

2. 标识符的链接属性(linkage)

标识符的链接属性(linkage)决定标识符指向的实体。

2.1 external链接属性

具有externel链接属性的标识符不论位于多少个编译单元、被声明多少次都指向同一个全局的实体。

2.2 internal链接属性

具有internel链接属性的标识符指向编译单元内(非全局)的实体。

3. 变量的存储类型(storage class)

变量的存储类型(storage class)决定变量的生命周期。

3.1 静态变量

在任何代码块之外声明的变量是静态变量,存储在可执行文件数据段(.data)或.bss段中。静态变量在程序运行之前创建,在程序执行结束后销毁。

3.2 局部变量

在代码块内部声明的变量的缺省存储类型是局部变量,存储于运行栈中。当程序执行到声明局部变量的代码块的声明语句时,局部变量才被创建,当程序的执行流离开该代码块时,这些局部变量便自行销毁。如果该代码块被执行多次,则这些局部变量每次都将重新创建。

3.3 寄存器变量

存储在硬件寄存器中,一般用作代码优化,这里不展开阐述。