C 存储类
C 存储类
存储类定义了变量的生命周期、可见性和内存位置。
C 语言中有四个主要的存储类说明符:
autostaticregisterextern
作用域和存储类的区别
作用域定义了变量的使用范围,而存储类定义了变量的有效期和存储位置。本章是C 作用域章节的延续。
auto
auto 关键字用于局部变量。它是函数内部声明变量的默认设置,因此很少显式使用。
static
static 关键字会改变变量或函数在生命周期和可见性方面的行为方式:
- 静态局部变量在函数调用之间保持其值不变。
- 静态全局变量/函数在其所在文件之外不可见。
示例
void count() {
static int myNum = 0; // 在两次通话之间保持其价值
myNum++;
printf("num = %d
", myNum);
}
int main() {
count();
count();
count();
return 0;
}
结果:
num = 1
num = 2
num = 3
尝试从示例中移除 static 关键字,看看有什么不同。
register
register 关键字表示该变量应存储在CPU寄存器中(以便更快地访问)。
您不能使用 & 获取 register 变量的地址。
注意: register 关键字基本已过时 - 现代编译器会自动选择最佳变量保存在寄存器中,因此通常不需要使用它。
extern
extern 关键字告诉编译器,某个变量或函数是在另一个文件中定义的。
当处理多个源文件时,通常会用到它。
文件 1: main.c
#include <stdio.h>
extern int shared; // 此处声明,定义在另一个文件中
int main() {
printf("shared = %d
", shared);
return 0;
}
文件 2: data.c
int shared = 50; // 变量定义
将两个文件一起编译:
gcc main.c data.c -o program

