基础 5 节
01
语言骨架:变量、类型与运算符
- 关键字、标识符与作用域
- 整型/浮点/字符的取值范围与精度损失
- 运算符优先级、结合性与求值顺序
- 隐式提升与显式转换的坑
- 语言骨架:变量、类型与运算符
02
流程控制与函数
- if/switch 的常见陷阱与 fallthrough
- 循环边界与 break/continue/goto
- 函数声明、定义与前置声明
- 递归、栈帧与尾递归
- 流程控制与函数
03
数组与字符串
- 一维/多维数组的内存布局
- 数组名退化(decay)与指针的区别
- 字符数组与 \0 终止符
- 越界访问为什么"看起来能用"
- 数组与字符串
04
结构体、联合体与枚举
- 结构体定义、嵌套与自引用
- 点/箭头运算符与成员访问
- 联合体的类型双关与字节序
- 枚举做常量组与状态机
- 结构体、联合体与枚举
05
预处理与编译四阶段
- 预处理→编译→汇编→链接各做什么
- #define 宏的参数括号与副作用
- 条件编译与平台分支
- 头文件守卫、包含顺序与循环包含
- 预处理与编译四阶段
进阶 5 节
06
指针与内存模型
- 指针算术与数组等价关系
- 多级指针与指针的指针
- void* 与类型擦除的回调设计
- 函数指针、回调表与跳转表
- 指针与内存模型
07
标准库常用设施
- string.h 全表与长度语义
- snprintf 安全格式化与解析
- stdlib 的转换、伪随机与搜索排序
- errno 的正确用法与线程安全
- 标准库常用设施
08
动态内存与对象生命周期
- malloc/calloc/realloc/free 与失败处理
- 栈/堆/静态区/常量区分布
- 内存池与分代分配
- 泄漏、双释放、use-after-free 的成因
- 动态内存与对象生命周期
09
文件与流式 IO
- FILE 流、缓冲模式与 fflush
- 文本与二进制模式的差异
- 格式化读写与配置文件解析
- 行读取的正确写法与getline 陷阱
- 文件与流式 IO
10
复杂声明与可变参数
- 阅读复杂声明(函数指针数组等)
- stdarg 实现可变参数
- 柔性数组与变长结构
- 位域、对齐与 sizeof 的真实含义
- 可变参数与复杂声明
高级 2 节
11
未定义行为与严格别名
- UB 清单:序列点、溢出、空指针解引用
- 严格别名规则与 -fstrict-aliasing
- 为什么优化会"吃掉"你的代码
- 用 UBSAN 与编译器告警把 UB 抓出来
- 未定义行为与严格别名
12
受限环境与 volatile
- volatile 与 MMIO/中断共享变量
- MISRA C 高频规则
- 无堆策略与栈用量估算
- 定点数、查表法与常量折叠
- 受限环境与 volatile