高质量程序设计指南c++/c语言(23)--存储类型及其作用域规则
在把一个程序的源代码转变为机器指令的过程中,一些程序元素被剔除了,一些程序元素则保留在可执行代码中。被保留的程序元素将在最终的可执行程序中占用一定的存储空间。然而,不同的程序元素在运行时的存储方式不尽相同,这就引出了“存储类型”的概念。同时,不同的程序元素在编译阶段具有不同的作用范围,这就是“作用域”的概念。
标准c语言为变量、常量、函数定义了4种存储类型,即extern、auto、static、register。extern和static用来标识永久生存期限的变量和函数,而auto和register则用来标示临时生存期限的变量(它们俩不修饰函数啊)。
默认情况下,全局变量和全局函数的存储类型都是extern的,可以被同一个编译单元内的函数所调用,如果在其他编译单元内将extern显示的加在函数和变量上,也可被其他编译单元访问。显示的声明static的全局变量和全局函数,则只能被同一个编译单元内的函数调用。
局部变量默认具有auto存储类型,除非用static或者register来定义。
c++中,全局常量的默认存储类型时static的,在其他编译单元中不可访问。
用register修饰的变量会被直接加载到cpu的寄存器中,如果寄存器足以容纳的下它。