C中存储类,链接,作用域
C中存储类,链接,作用域C中变量按照不同的标准有不同的分类方式,总的来说主要有三大类:存储周期,作用域,链接。
作用域:
作用域描述了程序中可以访问一个标志符的一个或多个区域。目前主要包括以下:
文件作用域:在所有函数之外定义的变量具有文件作用域。
函数原型作用域:从变量定义到原型声明的末尾。注意此时可以不写变量具体名称,编译器只关注变量的类型,如下(两者等价):
int showtime ( int time);int showtime ( int );
代码块作用域:在某一函数代码段内定义的变量具有代码块作由域,当程序离开该代码块后变量失去作用。
链接:
一个c变量具有以下链接之一:外部链接,内部链接或空链接
具有代码块和函数原型的存储周期的变量具有空链接,这意味着他们是有其定义所在的代码块或函数原型所私有的。具有文件作用域的变量可能具有外部链接或内部链接。一个具有外部链接的变量在一个程序包含的多个文件中任意使用;具有内部链接的变量只能在本文件内部的所有函数内使用。内部链接是通过关键字static来说明:
int time=6; //文件作用域,外部链接static int time=6; //文件作用域,内部链接int main(){…}
存储周期:
一个c变量具有两种存储周期:静态存储周期和自动存储周期,如果一个变量具有静态存储周期,它在程序执行期间将一直存在。具有文件作用域的变量具有静态存储周期;而具有代码块作用域的变量一般具有自动存储周期,当程序进入定义这些变量的代码块时,将为这些变量分配内存,当退出这个代码时将释放其内存。
C根据以上这个概念定义了5个存储类,如下:
存储类
时期
作用域
链接
声明方式
自动
自动
代码块
空
代码块内
寄存器
自动
代码块
空
代码块内,使用关键字register
具有外部链接的静态
静态
文件
外部
所有函数之外
具有内部链接的静态
静态
文件
内部
所有函数之外,使用static
空链接静态
静态
代码块
空
代码块内,使用static
注意:
说明符static在用于具有代码块作用域的变量时,使该变量具有静态存储周期,从而使其在程序运行期间一直存在,该变量具有代码块作用域和空链接。当static用于文件作用域的变量的声明时,表明该变量具有内部链接。当使用static声明或定义一个函数时,表明创建为一个特定模块所私有的函数,从而避免可能的名字冲突。
页:
[1]