C 存储类(Storage Classes)
存储类描述变量/函数的存储期、作用域和链接属性。
1. auto(自动存储期)
- 默认局部变量的存储类
- 进入块分配,离开块释放
2. static(静态存储期)
- 局部 static:函数内保持值直到程序结束
- 全局 static:内部链接,仅当前源文件可见
c
#include <stdio.h>
void counter(void) {
static int c = 0; // 仅初始化一次
printf("c=%d\n", ++c);
}
int main(void) {
counter(); counter(); counter();
}3. extern(外部链接)
- 声明外部定义的符号
c
// a.c
int g = 42; // 定义
// b.c
extern int g; // 声明4. register(提示性)
- 历史遗留,建议忽略,让编译器自行优化
5. 函数的存储类
- 函数默认具有外部链接
- 使用
static可限制为内部链接
6. 线程局部存储(可选)
- C11
_Thread_local,或编译器扩展__thread
7. 小结
理解存储类有助于你控制变量与函数的可见性与生命周期,在多文件工程尤为重要。