04 · 常量与存储类

2026.09.27 · 🟡 中

常量定义

const int MAX = 100;            // ✅ 推荐:有类型,编译期检查
#define MAX 100                 // 宏:纯文本替换,无类型检查
enum { RED, GREEN, BLUE };      // 枚举常量(见 [[13-共用体-位域-枚举-typedef]])

转义字符:\n 换行 · \t 制表 · \\ 反斜杠 · \' 单引号 · \0 空字符(字符串结束标志)

存储类(4 个关键字,面试高频)

关键字 作用 记忆点
auto 自动变量(局部变量默认,几乎不写) 现代 C 里很少显式用
static ① 局部静态:生命周期延续到程序结束(值保留)
② 全局静态:限制为文件作用域
一变量两身份
register 建议放寄存器加速(编译器多半忽略) 已过时
extern 声明变量/函数在别处定义 跨文件共享

static 的两种身份(一定要分清)

void f(void) {
    static int cnt = 0;   // 只在第一次初始化,函数多次调用值会累加
    cnt++;
    printf("%d\n", cnt);  // 1, 2, 3 ...
}
static int g = 0;         // 文件级静态:其他 .c 文件看不到它(相当于私有)

生命周期与作用域对照

存储位置 生命周期 谁分配
栈(局部变量) 函数调用期间 系统自动
堆(malloc) 直到 free 程序员手动
全局/静态区 整个程序 系统,自动初始化为 0
常量区 整个程序 只读

关联

03-数据类型与变量 · 19-内存管理 · 16-预处理器与头文件