C 是数字世界的基石,被称为“可移植的汇编语言”。它结合了高级抽象能力与极低开销的硬件控制能力,成为操作系统、嵌入式系统与高性能软件组件背后的核心力量。
但自由与强大同时伴随风险:C 以“信任程序员”为哲学,在追求性能的同时牺牲了内存安全,使指针、缓冲区溢出等问题在过去数十年里屡屡引发重大事故。
本期从 C 的历史、标准化进程,一直到编程基础(变量、指针、控制流)进行了系统梳理,并深入讲解了内存安全隐患与现代软件工程对这些风险的缓解手段。
🕒 时间轴
0:00 — 语言的基石
C 几乎存在于所有操作系统、手机、汽车 ECU、嵌入式设备
为什么它被称为“可移植的汇编语言”
0:14 — 高抽象 + 直接操作硬件
C 既提供高级语言能力,又能像汇编一样贴近硬件
0:31 — C 的重要性:不仅要会“怎么做”,更要懂“为什么”
从环境搭建到理解底层能力的哲学
0:59 — C 的危险来自哪里
设计哲学:最小化 runtime、“信任程序员”
性能极致,但安全网极薄
1:32 — C 的标准化历程
从《K&R》到 ANSI/ISO 标准
C89 → C99 → C11 → C18 → C23(2024 年刚采纳)
2:59 — C 的持续进化
新特性如 _Bool、nullptr/no_return 等更现代化
为什么几十年后它仍在更新
3:52 — C vs Rust:哲学差异
Rust:不信任程序员 → 编译器强制安全
C:把性能和责任完全交给程序员
为什么在飞控、汽车、OS kernel 中 C 仍无可替代
5:09 — 搭建开发环境的本质
“翻译官”=编译器(GCC)
“智能笔记”=VS Code + 必备插件
安装路径不能有中文/空格的重要提醒
7:58 — 从 Hello World 拆解 C 程序
#include、main()、printf()、\n、return 0、分号
预处理 → 编译 → 链接 的概念
9:20 — 变量与数据类型
int float double char 的底层含义
ASCII:字符本质也是数字
10:53 — 经典新手坑:整数除法截断
3/4 = 0
必须让至少一个操作数是浮点数
11:35 — 指针:C 的灵魂与噩梦
“盒子与储物柜编号”类比
通过地址间接读写内存
指针为何既强大、又危险
12:44 — 空指针与大型事故
用 Windows 全球蓝屏事件举例
空指针解引用为何会直接导致系统崩溃
13:56 — 控制流:if、switch、循环
程序的「选择」与「重复」能力
for vs while 的适用场景
15:27 — C 的核心矛盾:性能 vs 安全
缓冲区溢出的本质
攻击者如何通过溢出修改返回地址并劫持控制权
17:13 — 现代缓解技术
不使用危险函数 gets()
Stack Canary(栈保护)
ASLR(地址空间随机化)
编译器与 OS 的防御手段
18:32 — 回顾核心知识
C 为什么能成为系统编程的基石
指针、内存、控制流的底层逻辑
安全隐患与现代补救措施
18:58 — 留给听众的思考
Python/Go/Java 背后的运行时与高性能库,大量依赖 C
现代高级语言的便捷,其实都建立在 C 的地基之上

