参考《C/C++程序员面试宝典》
变量存储类型
存储类型是从变量的存在时间来划分变量,可分为静态存储方式和静态存储方式。对于动态存储变量,当程序运行到该变量处时才为其分配存储空间,当程序运行到该变量所在作用域的结束处时自动收回为其分配的存储空间,因此它的存在时间 == 作用域运行时间。对于静态存储变量,在程序开始时为其分配存储空间,程序结束时才收回存储空间,其存在时间 == 程序运行时间。变量存储类型有以下几种:
自动类型变量(auto)
自动类型只能是局部类型的变量,属于动态存储变量。
静态类型变量(static)
在程序运行中,静态变量始终占用一个存储空间。静态变量只能在它的作用范围使用,使用局部静态变量是为了在下次调用该函数时,能使用上次调用后得到的该变量的值。
寄存器类型变量(register)
属于动态存储类型。编译器不为寄存器类型变量分配内存空间,而是直接用CPU寄存器。以便提高对这类变量的存取速度。主要用于控制循环次数等不需要长期保存的变量。
外部类型变量(extern)
外部类型变量必须是全局变量。在C++中,有两种情况需要使用外部类型变量。一种是在同一个源文件中,当在全局的定义之前使用该变量时,在使用前要对该变量进行外部类型变量声明。另一种是当程序由多个文件组成时,若在一个源文件中要引用另一个源文件中定义的全局变量,则在引用前必须对所引用的变量进行外部声明。
PS:如果在某文件中定义的变量不想被其他文件所调用,则必须将该变量声明为静态全局变量,也就是说,静态全局变量只能供所在文件中使用。