一套面向零基础学习者的中文 C 语言教程,从计算机与编译基础讲起,逐步延伸到内存管理、工程组织和基础数据结构。仓库同时提供课程正文与配套源码,方便边学、边写、边验证。
- 循序渐进:从开发环境和基础语法开始,逐步进入指针、动态内存、多文件项目与数据结构。
- 文档与源码配套:课程中的完整示例均可在
src/目录找到对应代码,第一至第十六章提供逐章构建脚本。 - 重视内存安全:围绕数组边界、指针有效性、对象生命周期和动态内存释放建立清晰的分析习惯。
- 兼顾工程实践:除单文件程序外,还包含头文件组织、编译链接和 CMake 项目示例。
| 阶段 | 章节 | 核心内容 |
|---|---|---|
| 基础入门 | 第 0~2 章 | 计算机基础、开发环境搭建、变量、类型、表达式、分支、循环、函数 |
| 组织数据 | 第 3~5 章、第 13 章 | 数组、字符串、结构体、共用体、枚举 |
| 理解内存 | 第 6~12 章 | 内存模型、指针、结构体指针、函数指针、动态分配、生命周期 |
| 语法扩展 | 第 14~15 章 | 宏、文件 I/O |
| 工程基础 | 第 16~17 章 | 头文件组织、编译链接、CMake 构建 |
| 数据结构 | 总览篇、第 18~19 章 | 数组增删改查、单链表、双链表、顺序栈、链式队列、环形队列 |
| 查漏补缺 | 第 20 章 | C 语言常见语法与概念辨析 |
入门篇已经覆盖核心语法、内存模型、基础数据结构和工程构建。后续计划继续补充以下内容:
- CMake 进阶:创建与导入库、编译参数配置、构建优化
- 函数接口设计:使用
void *设计通用接口,通过const和清晰的所有权约定减少误用 - goto 的使用:理解
goto的语法、陷阱与合理场景,例如错误集中处理、跳出嵌套循环和状态机 - 宏魔法:字符串化(
#)、记号粘贴(##)、可变参数宏、X Macro 等高级用法 - 内存对齐及其应用:分析
struct与union的成员布局,理解填充、对齐、alignof/alignas和性能影响 - 柔性数组:掌握 C99 柔性数组成员的语法、内存布局与实战场景
- 非线性数据结构——树:二叉树、二叉搜索树、AVL、红黑树、二叉堆与优先队列
- 非线性数据结构——图:邻接矩阵、邻接表、DFS、BFS 与常见图算法
- C 语言面向对象编程:结合结构体、函数指针与虚表,探索封装、继承和运行时多态
- initcall 风格机制:学习程序启动期自动注册思路,理解链接器或编译器扩展在其中的作用
- 实战项目:待定
.
├─ book/
│ ├─ book.toml # mdBook 配置
│ └─ src/ # 课程正文、目录与图片
└─ src/
├─ README.md # 配套源码说明
├─ build_chapter.sh # Linux/macOS/Git Bash 逐章构建脚本
├─ build_chapter.ps1 # Windows PowerShell 逐章构建脚本
├─ ch01-basics/ # 基础章节的独立示例
├─ ...
├─ ch16-headers/ # 多文件与头文件示例
├─ ch17-cmake/ # CMake 入门项目
└─ ch18-data-structures/ # 六个独立的数据结构项目
课程正文位于 book/src/,配套代码位于仓库根目录下的 src/。第一至第十六章以独立 .c 文件和手动构建脚本为主;第十七章开始使用 CMake;第十八、十九章的数据结构项目采用 include/、src/ 和 CMakeLists.txt 的常见布局,便于观察公开接口、内部实现与演示入口之间的关系。
安装 mdBook 后,在仓库根目录运行:
mdbook serve book --open如果 mdBook 是通过 Rust/Cargo 安装但还没有加入 PATH,可以直接使用:
~/.cargo/bin/mdbook serve book --open只生成静态站点时运行:
mdbook build book生成的静态文件位于 book/book/。提交 book/ 目录中的改动后,GitHub Actions 会自动重新构建并发布在线教程。
第一至第十六章提供逐章构建脚本,会自动编译该章所有 .c 文件,并把可执行程序输出到章节目录的 bin/ 中。
Linux/macOS/Git Bash:
cd src/ch03-arrays
./build.sh或从 src/ 目录调用统一脚本:
cd src
./build_chapter.sh ch03-arraysWindows PowerShell:
cd src/ch03-arrays
.\build.ps1包含 main 函数的单文件完整示例也可以直接使用 Clang 编译:
clang -std=c11 -Wall -Wextra path/to/example.c -o example第十六章讲解多文件项目,编译时需要同时指定相关源文件和头文件搜索路径:
clang -std=c11 src/ch16-headers/src/main.c src/ch16-headers/src/mathutils.c \
-Isrc/ch16-headers/include -o mathutils_demo第十七章及数据结构部分提供了 CMake 项目,可以使用统一流程构建:
cmake -S src/ch17-cmake -B build/ch17
cmake --build build/ch17src/ch18-data-structures/ 下的每个子目录都是独立的 CMake 项目;构建其他示例时,将 -S 后的路径替换为相应目录即可。
维护文档和源码时,建议至少运行:
~/.cargo/bin/mdbook build book
bash src/build_chapter.sh src/ch03-arrays
cmake -S src/ch18-data-structures/singly-linked-list -B src/ch18-data-structures/singly-linked-list/build
cmake --build src/ch18-data-structures/singly-linked-list/build需要全量检查时,可按 src/README.md 中的说明逐章构建,并分别构建 src/ch17-cmake 与 src/ch18-data-structures/ 下的各个 CMake 项目。