C 存储类
变量的“存储类”可确定项是具有“全局”还是“本地”生存期。 C 将这两个生存期称为“静态”和“自动”。具有全局生存期的项存在且具有贯穿整个程序执行过程的值。 所有函数都具有全局生存期。
每次执行控制权传递到从中定义它们的块时,都会为自动变量或具有本地生存期的变量分配新存储。 当执行返回时,这些变量不再具有有意义的值。
C 提供了以下存储类说明符:
语法
storage-class-specifier
:
auto
register
static
extern
typedef
__declspec (
extended-decl-modifier-seq
)
/* Microsoft-specific */
除 __declspec
之外,只能在声明中的 declaration-specifier
中使用一个 storage-class-specifier
。 如果没有制定存储类规范,块中的声明将创建自动对象。
使用 auto
或 register
说明符声明的项有本地生存期。 使用 static
或 extern
说明符声明的项有全局生存期。
由于 typedef
和 __declspec
与其他四个 storage-class-specifier
终端的语义不同,因此将分开讨论它们。 有关 typedef
的详细信息,请参阅 typedef
声明。 有关 __declspec
的特定信息,请参阅扩展的存储类特性。
源文件中变量和函数声明的位置还会影响存储类和可见性。 所有函数定义之外的声明可认为显示在“外部级别”。函数定义中的声明显示在“内部级别”。
每个存储类说明符的确切含义取决于两个因素:
声明是显示在外部还是内部级别
要声明的项是变量还是函数
用于外部级别声明的存储类说明符和用于内部级别的存储类说明符介绍了每种声明中的 storage-class-specifier
终端并解释了从变量中省略 storage-class-specifier
时的默认行为。 存储类说明符与函数声明讨论了与函数一起使用的存储类说明符。