1. 从这里开始
本教程面向愿意通过阅读、运行、修改和验证程序来学习 C 的读者。上手写代码(不会写代码可以抄代码)是必要的。
叫我 Mdr 就好。你不用学一辈子 C 语言,但我们可以做一辈子朋友。
1. 教程地图
- 第 0 部分:导读与学习指南
- 第一部分:语法和标准库
- 第二部分:开发与工程基础
- 第三部分:数据结构与算法
- 第四部分:系统编程
- 第五部分:项目案例
- 第六部分:嵌入式
第一次系统学习 C 时,先完成第一部分:语法和标准库。这一部分的内容包括值、对象、类型、表达式、控制流、函数、数组、指针、复合类型、存储、预处理和标准库。这一阶段的所有示例程序和习题,都可以在单个 .c 文件中完成。
随后进入第二部分:开发与工程基础,学习命令行与目录、编译与链接、头文件和接口边界、构建系统、调试、测试、检查工具、Git 和工程组织。工程知识在这里第一次成为主线,而不是穿插在语言规则中。这一阶段,我们要写多个文件构成的较为复杂的项目。
完成前两部分之后可以按目标选择,进入第三部分:数据结构与算法、系统编程、项目案例或嵌入式;每个专题应在开头列出额外前置内容。
2. C 语言与相关领域知识地图
3. 本站的阅读方式
3.1 正文与生成内容
作者正文负责给出标准版本、事实和代码。标记为 generate 的区域根据读者选择的详略、语气和示例偏好生成主讲内容;没有配置生成能力时,作者正文仍然可以直接阅读。
concept 块给出生成内容必须遵守、不能改写的结论。移动正文时,关联的 concept 与 generate 块必须一起保留。
3.2 习题、自测与题解
Quiz 用于当前页面的即时自测;Exercise 是需要单独完成的实践任务。习题编号共有五位:第一位表示专业模块,中间两位是区块号(一章或一个项目占一个区块),最后两位是区块内序号。
有题解的习题可以从习题快速导航进入。正文中的示例负责说明知识,完整程序和测试数据则放在对应代码目录中。
4. 社区与交流
日常交流见编程交流群生存指南。
4.1 如何批评 C
C 有很多值得黑的地方,不过黑的话要拿出证据来(当然这些证据也俯拾即是)。
INFO
瑕不掩瑜,C 语言的优点比缺点多很多。
- C Primer Plus
4.2 C 与 C++
C 与 C++ 是两门不同的语言。把 C 看作 C++ 的子集是不合适的。C++ 是一门更复杂的编程语言。关于它的讨论超出了本教程的范围。但你可以通过以下书籍学习 C++:
- Bjarne Stroustrup 的 C++ 程序设计:原理与实践(最推荐)
- Bjarne Stroustrup 的 The C++ Programming Language(偏工具书)
- Stanley B. Lippman、Josée Lajoie 和 Barbara E. Moo 的 C++ Primer(偏工具书)
在 C++ Reference 上可以找到 C++ 的全部语言特性和标准库功能。
4.3 提问时应提供什么
报告正文或代码问题时,请提供页面地址,并附上下面五项:
- 希望实现的行为。
- 能够单独运行的最小代码。
- 使用的标准模式、编译器及版本。
- 完整输入、输出和诊断。
- 已经尝试过的排查方法。
4.4 常见问题
- 第一部分需要命令行吗?不需要,能够运行一个
.c文件即可。 - 第一部分可以使用标准头吗?可以。第一部分只要求读者自己编写一个源文件,标准头和标准库照常使用。
- 什么时候学习 Git、构建和测试?从第二部分开始。
- 需要背下全部标准库函数吗?不需要。了解标准库有哪几类函数,并学会查阅可靠的资料即可。