跳转到内容

导学阶段 — 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 语言"编辑 — 编译 — 运行"全流程的直观认知,消除初学者面对空白编辑器时的畏惧感。

根据训练营总体规划,本阶段旨在解决"零基础学员不知从何下手"这一核心问题。设计思路为:最小化代码,最大化理解

主要目标

  1. 建立编程心智模型:理解"源代码 → 编译器 → 可执行文件 → 运行结果"的完整链路,掌握 main 函数的结构、返回值的含义,形成对 C 程序运行机制的初步认知。
  2. 掌握基本语法要素:通过 5 个精心设计的最小可运行程序,学会变量定义、表达式计算、格式化输入输出(printf / scanf)、循环控制(while / for)、条件分支(if-else)等 C 语言最基础的语法构件。
  3. 熟悉开发工具与工作流:学会使用 GCC 编译器和训练营的 clings 练习工具(Rustlings 风格的交互式 C 语言练习框架),养成"保存即验证"的高效开发习惯。
  4. 为后续阶段铺路:本阶段的 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(指针地址)等格式说明符。
  • 扩展:通过打印程序段地址(etextedata),初步感知进程的内存布局。

Lesson 3 — 循环打印(2 道题)

  • 掌握 while 循环和 for 循环的结构与适用场景。
  • 理解计数器变量、自增运算符 ++、关系运算符 < <=
  • 对比 whiledo-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 语言入门教材,适合零基础读者系统学习。

在线教程

参考资料(进阶)

开发环境搭建

  • 推荐使用 CNB 云原生开发环境(Fork 仓库后一键启动,无需本地配置)。
  • 本地开发推荐 Linux 环境(WSL2 + Ubuntu 或虚拟机),安装 GCC 和 Python 3.11+。
  • 安装 clings 练习工具:推荐使用 uvx clings@latest 命令(无需全局安装,隔离运行)。

四、学习方式与建议

  1. 先读讲义,再做练习:每个 Lesson 目录下的 README.md 包含代码示例、知识点、BNF 语法分析和课堂讨论题。建议先通读讲义,理解知识点后再动手修改 .c 文件。

  2. 善用 clings 工具:进入 clings 的 watch 模式后,每次保存文件会自动编译和验证。遇到卡壳时按 h 查看提示,按 l 浏览题目列表,按 t 查看测试用例(TDD 开发)。

  3. 重视编译器报错:C 语言学习的第一课就是学会阅读编译器的错误信息。Lesson 1 的课后练习甚至要求你"故意制造编译错误"——这是非常有价值的训练。

  4. 思考"为什么":每个 Lesson 都设有课堂讨论题,例如"main 是 C 语言的关键字吗?"、"printf 的参数多于或少于 % 的个数会怎样?"。这些问题引导你从表面语法深入到语言设计的本质,对后续学习至关重要。

  5. 动手做扩展练习:每个 Lesson 的课后练习(如猜数字游戏、打印月历等)虽不计入成绩,但能极大提升编程熟练度和自信心。

五、关于晋级与要求

晋级方式

  1. Fork 训练营的 Unit-0-C-Primer 仓库,在云原生开发环境或本地环境中完成 9 道练习题。
  2. 提交代码到 main 分支并创建合并请求(PR),CI 系统会自动评分。
  3. 可多次提交,以最高分为准。通过后即可在 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 0C Primer5 课 / 9 题最简程序、printf、循环、条件分支、累加求和

从"编辑 — 编译 — 运行"的全流程入手,通过 5 个最小可运行程序建立 C 语言的基本心智模型。使用 clings 工具交互式练习。

基础阶段

Unit名称课程数核心内容
Unit 1C Fundamentals19 课 / 40 题嵌套循环、函数、数组、指针、结构体、联合体、位运算、可变参数、预处理器、状态机

从九九乘法表到词法分析器,涵盖 C 语言核心语法特性。通过实现 printf、命令解释器、预处理器、词法分析器等项目,将语法知识转化为工程能力。两节腾讯会议直播授课(2026/06/29 和 2026/07/01)。

进阶阶段

Unit名称课程数核心内容
Unit 2C Essentials24 课链表、栈、队列、树、堆、散列表、排序、查找、递归、动态规划

系统学习经典数据结构与算法,从文件操作(cp/sed/ELF 解析)到命令行工具(计算器/sort/ls/MyBash),最终完成地图导航综合项目。

专业阶段

Unit名称课程数核心内容
Unit 3C Classicals24 课哲学家就餐、停等协议、LL(1) 解析器、B+ 树、光线追踪、A*寻路、RSA、向量时钟、缓存模拟、Aho-Corasick、NFA→DFA、测试框架、缓冲区溢出、感知机、LU 分解、无锁环形缓冲、标记清除 GC、图灵机、FFT、Sobel 边缘检测、TF-IDF、量子比特、PoW 区块链、终端计算器

覆盖计算机科学 17 个子领域的经典问题,每题平均编写约 96 行 C 代码,为编译器项目建立广阔的 CS 视野。

项目阶段

完成前三个阶段后,进入双线并行的项目实践:

Unit名称课程数核心内容
Unit 4C Compiler24 课从零实现 C 编译器 nccl-cc:一棵 AST,四个后端,五个运行环境
Unit 5C Kernel24 课从零实现操作系统内核 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、在多核处理器上并行调度的完整操作系统。

Released under the MIT License.