导学阶段 — Unit 0: C Primer(C 语言入门热身)
"Many of the improvements I introduced when developing C simply looked like a good thing to do." — Dennis Ritchie(C 语言之父)
实验仓库:Unit-0-C-Primer
一、阶段定位与目标
本阶段是整个 C 语言训练营的入门起点。在您深入学习 C 语言核心语法、数据结构与算法乃至编译器实现之前,我们希望帮助您建立对 C 语言"编辑 — 编译 — 运行"全流程的直观认知,消除初学者面对空白编辑器时的畏惧感。
根据训练营总体规划,本阶段旨在解决"零基础学员不知从何下手"这一核心问题。设计思路为:最小化代码,最大化理解。
主要目标
- 建立编程心智模型:理解"源代码 → 编译器 → 可执行文件 → 运行结果"的完整链路,掌握
main函数的结构、返回值的含义,形成对 C 程序运行机制的初步认知。 - 掌握基本语法要素:通过 5 个精心设计的最小可运行程序,学会变量定义、表达式计算、格式化输入输出(
printf/scanf)、循环控制(while/for)、条件分支(if-else)等 C 语言最基础的语法构件。 - 熟悉开发工具与工作流:学会使用 GCC 编译器和训练营的 clings 练习工具(Rustlings 风格的交互式 C 语言练习框架),养成"保存即验证"的高效开发习惯。
- 为后续阶段铺路:本阶段的 5 个 Lesson 覆盖了 C 语言最核心的程序结构,为 Unit 1(C Fundamentals)中的函数、数组、指针等进阶内容,乃至后续 Unit 2(数据结构与算法)、Unit 3(CS 经典问题)和 Unit 4(从零实现 C 编译器)打下扎实的语言基础。
授课形式
本阶段为纯自学阶段,学员可按自身节奏完成 5 个 Lesson 的学习。主要依托:
- 训练营维护的 clings 练习仓库(5 个 Lesson,共 9 道小题)
- 每个 Lesson 配套的 README 讲义(含 BNF 范式分析、扩展代码、课堂讨论与课后练习)
- CNB 云原生开发环境(一键开箱)或本地 GCC 环境
二、主要内容与学习路径
本阶段通过 5 个递进式 Lesson,覆盖以下知识模块:
Lesson 1 — 最简单的 C 程序(2 道题)
- 理解
int main(void) { return 0; }的每一个组成部分。 - 掌握数据类型
int、函数定义、参数列表void、返回值return。 - 认识全局变量与局部变量、赋值运算符
=、双目运算符+。 - 扩展:从 C 语言 BNF 范式角度,逐层解析"翻译单元 → 外部声明 → 函数定义 → 复合语句"的语法结构。
Lesson 2 — 打印输出 Hello World(2 道题)
- 学会使用
#include <stdio.h>引入标准库。 - 掌握
printf函数、字符串常量、转义字符\n。 - 学习格式化输出:
%d(十进制)、%x(十六进制)、%p(指针地址)等格式说明符。 - 扩展:通过打印程序段地址(
etext、edata),初步感知进程的内存布局。
Lesson 3 — 循环打印(2 道题)
- 掌握
while循环和for循环的结构与适用场景。 - 理解计数器变量、自增运算符
++、关系运算符<<=。 - 对比
while与do-while的执行顺序差异,培养"先思考循环不变量"的编程习惯。 - 扩展:循环累加求和,为 Lesson 5 做铺垫。
Lesson 4 — 判断奇偶(1 道题)
- 学会使用
scanf读取用户输入。 - 掌握
if-else条件分支、取模运算符%、关系运算符==。 - 理解取地址符
&在scanf中的必要性(指针的第一次接触)。
Lesson 5 — 从 1 加到 100 求和(2 道题)
- 综合运用
for循环完成 1 到 100 的累加。 - 学习
continue语句实现条件跳过(只累加偶数)。 - 理解复合赋值运算符
+=。 - 扩展:
#ifdef DEBUG条件编译与调试宏的初步认识。
练习工具 — clings
- 使用训练营基于 CNB 云原生开发环境的 clings 练习仓库进行交互式练习。
- 通过 Rustlings 风格的"读报错、修代码、保存即验证"的方式逐题过关。
- 训练营会自动统计您的完成情况并记入阶段成绩。
三、推荐学习资料
以下资料可作为本阶段的主要参考:
核心教材
- 《C 程序设计语言》(The C Programming Language, K&R):C 语言创始人 Dennis Ritchie 与 Brian Kernighan 合著的经典入门书,薄而精,强烈推荐边读边做练习。
- 《C Primer Plus》:内容详尽的 C 语言入门教材,适合零基础读者系统学习。
在线教程
- 一站式学习 C 编程 — 宋劲杉
- C 语言教程 — 菜鸟教程
- Learn C — interactive tutorial
- C Programming - A Modern Approach:配合 K.N. King 教材使用
参考资料(进阶)
开发环境搭建
- 推荐使用 CNB 云原生开发环境(Fork 仓库后一键启动,无需本地配置)。
- 本地开发推荐 Linux 环境(WSL2 + Ubuntu 或虚拟机),安装 GCC 和 Python 3.11+。
- 安装 clings 练习工具:推荐使用
uvx clings@latest命令(无需全局安装,隔离运行)。
四、学习方式与建议
先读讲义,再做练习:每个 Lesson 目录下的 README.md 包含代码示例、知识点、BNF 语法分析和课堂讨论题。建议先通读讲义,理解知识点后再动手修改 .c 文件。
善用 clings 工具:进入 clings 的 watch 模式后,每次保存文件会自动编译和验证。遇到卡壳时按
h查看提示,按l浏览题目列表,按t查看测试用例(TDD 开发)。重视编译器报错:C 语言学习的第一课就是学会阅读编译器的错误信息。Lesson 1 的课后练习甚至要求你"故意制造编译错误"——这是非常有价值的训练。
思考"为什么":每个 Lesson 都设有课堂讨论题,例如"main 是 C 语言的关键字吗?"、"printf 的参数多于或少于 % 的个数会怎样?"。这些问题引导你从表面语法深入到语言设计的本质,对后续学习至关重要。
动手做扩展练习:每个 Lesson 的课后练习(如猜数字游戏、打印月历等)虽不计入成绩,但能极大提升编程熟练度和自信心。
五、关于晋级与要求
晋级方式
- Fork 训练营的 Unit-0-C-Primer 仓库,在云原生开发环境或本地环境中完成 9 道练习题。
- 提交代码到 main 分支并创建合并请求(PR),CI 系统会自动评分。
- 可多次提交,以最高分为准。通过后即可在 OpenCamp 晋级榜单上查看成绩。
评分标准
- 共 5 个 Lesson、9 道小题,每题通过 clings 自动评测。
- 评测模式包括返回值检查(如
return 0)和标准输出比对(如打印内容与期望值逐字符匹配)。
重要提示
本阶段是 C 语言训练营的起点,题目设计刻意保持简单,目的是让零基础学员也能顺利上手。但请不要因为简单就掉以轻心——每个 Lesson 背后的知识点(变量的内存布局、BNF 语法结构、编译与链接的区别等)都是后续 Unit 1-4 的理论根基。认真对待这 5 个 Lesson,将为您后续学习函数与指针(Unit 1)、数据结构与算法(Unit 2)、CS 经典问题(Unit 3)以及从零实现 C 编译器(Unit 4)打下坚实的基础。
六、训练营完整学习路线
本 C 语言训练营采用 "四阶段 + 双项目" 的成长路径,从零基础入门到亲手实现编译器与操作系统内核,共 6 个 Unit,共计 120 课。最终目标:学员同时具备用 C 语言实现编译器和从裸机搭建操作系统内核的系统级编程能力,形成"语言 → 算法 → 系统 → 编译器 → 内核"的完整知识闭环。
导学阶段
| Unit | 名称 | 课程数 | 核心内容 |
|---|---|---|---|
| Unit 0 | C Primer | 5 课 / 9 题 | 最简程序、printf、循环、条件分支、累加求和 |
从"编辑 — 编译 — 运行"的全流程入手,通过 5 个最小可运行程序建立 C 语言的基本心智模型。使用 clings 工具交互式练习。
基础阶段
| Unit | 名称 | 课程数 | 核心内容 |
|---|---|---|---|
| Unit 1 | C Fundamentals | 19 课 / 40 题 | 嵌套循环、函数、数组、指针、结构体、联合体、位运算、可变参数、预处理器、状态机 |
从九九乘法表到词法分析器,涵盖 C 语言核心语法特性。通过实现 printf、命令解释器、预处理器、词法分析器等项目,将语法知识转化为工程能力。两节腾讯会议直播授课(2026/06/29 和 2026/07/01)。
进阶阶段
| Unit | 名称 | 课程数 | 核心内容 |
|---|---|---|---|
| Unit 2 | C Essentials | 24 课 | 链表、栈、队列、树、堆、散列表、排序、查找、递归、动态规划 |
系统学习经典数据结构与算法,从文件操作(cp/sed/ELF 解析)到命令行工具(计算器/sort/ls/MyBash),最终完成地图导航综合项目。
专业阶段
| Unit | 名称 | 课程数 | 核心内容 |
|---|---|---|---|
| Unit 3 | C Classicals | 24 课 | 哲学家就餐、停等协议、LL(1) 解析器、B+ 树、光线追踪、A*寻路、RSA、向量时钟、缓存模拟、Aho-Corasick、NFA→DFA、测试框架、缓冲区溢出、感知机、LU 分解、无锁环形缓冲、标记清除 GC、图灵机、FFT、Sobel 边缘检测、TF-IDF、量子比特、PoW 区块链、终端计算器 |
覆盖计算机科学 17 个子领域的经典问题,每题平均编写约 96 行 C 代码,为编译器项目建立广阔的 CS 视野。
项目阶段
完成前三个阶段后,进入双线并行的项目实践:
| Unit | 名称 | 课程数 | 核心内容 |
|---|---|---|---|
| Unit 4 | C Compiler | 24 课 | 从零实现 C 编译器 nccl-cc:一棵 AST,四个后端,五个运行环境 |
| Unit 5 | C Kernel | 24 课 | 从零实现操作系统内核 Avatar OS:裸机引导到多核调度 |
Unit 4 — C Compiler 用约 4000 行 C 代码完整走通"预处理 → 词法 → 语法 → 类型标注 → 代码生成"全流程,支持 RISC-V / ARM / AArch64 / x86-64 四个后端和 Linux 用户态 + 裸机共五种运行环境。最终验证:用自己写的编译器编译约瑟夫环程序,在四个架构上得到相同结果。
Unit 5 — C Kernel 基于 Avatar OS 真实内核代码,分五个子阶段递进:裸机基础 → 内存与同步 → 中断与定时器 → 多任务 → 用户态与多核。代码取自 Avatar OS 仓库,支持 AArch64 / RISC-V 64 / x86_64 三架构在 QEMU 上验证。最终目标:一个能运行 busybox shell、在多核处理器上并行调度的完整操作系统。