存储类别
存储类别 | 存储期 | 作用域 | 链接 | 声明方式 |
自动 | 自动 | 块 | 无 | 块内 |
寄存器 | 自动 | 块 | 无 | 块内,使用关键字register |
静态外部链接 | 静态 | 文件 | 外部 | 所有函数外 |
静态内部链接 | 静态 | 文件 | 内部 | 所有函数外,使用关键字static |
静态无链接 | 静态 | 块 | 无 | 块内,使用关键字static |
存储类别说明符
- auto说明符表明变量是自动存储期,只能用于块作用域的声明变量中。由于在块中声明的变量本身就具有自动存储期。所以使用auto主要是为了明确表达要使用与外部变量同名的局部变量的意图。
- register说明符也只用于块作用域的变量,他把变量归为寄存器存储类别,请求最快速度访问该变量。同时,还保护了该变量的地址不被获取。
- 用static说明符创建的对象具有静态存储期,载入程序是创建,但程序结束时对象消失。如果static用于文件作用域声明,作用域局限与该文件。如果static用于块作用域声明,作用域则局限于该块。因此,只要程序在运行对象就保留其值,但是只有在执行块内代码师,才能通过标识符访问。块作用域的静态变量无链接。文件作用域的静态变量具有内部链接。
- extern说明符表明声明的变量定义在别处。如果包含extern的声明具有内部链接,则引用的变量可能具有外部链接或内部链接,着取决于该变量的定义式声明。在某文件中会外部变量进行定义式声明只是单方面允许其他文件使用该变量,其他文件再用extern声明前不能直接使用他。