3. 如何学习与资料
1. 先理解语义,再积累惯用法
1.1 真正的底层是“语义”,而非实现
很多初学者认为,“底层”就是指那些跟硬件打交道的东西,比如汇编和操作系统。这没错,但它不是学习的起点。
先确认规则,再研究实现
对于学习者而言,真正的“底层”是语言的“语义”(Semantics)——即一个特性“是什么”以及它“承诺遵守的规则”。
- 语义(你要先掌握的):比如,
union可以包含多个成员,但同一时刻只保存其中一个成员的值。这是它的核心身份,是它不变的承诺。 - 实现(你可以后探索的):编译器具体如何实现这条规则,不同编译器的实现有什么差异。这是它具体的“建造方式”。
1.2 掌握语言的“成语”与“套路”(Idioms)
每门编程语言都有一些约定俗成的写法,用来解决反复出现的特定问题,称为惯用法 (Idiom),俗称“套路”。
以循环为例,for 和 while 都能实现循环,但惯用的场合不同:
for的套路:用于已知次数的迭代。例如从头到尾处理一个数组时,标准写法是for (int i = 0; i < n; i++),初始化、条件和更新集中写在一行,读者一眼就能看出循环执行n次。while的套路:用于次数未知、依赖某个条件才能结束的迭代,例如读取文件直到末尾,或等待用户输入特定指令。while (condition)表示只要条件成立,就继续执行循环体。
先学语义,后探索套路,必要时了解实现。
1.3 如何学习这些“套路”
套路来自实践,存在于实际的代码和程序员社区中,教科书很少系统讲授。学习套路要多读代码,多写代码:
- 看各种代码片段 (Snippet):主动寻找和阅读解决小问题的优秀代码。
- 使用在线编程平台(如 Codewars):在平台上反复练习小题目。
- 按以下步骤练习:
- 第一步:自己动手。用当前学会的知识,独立解决一个问题。
- 第二步:观摩高手。提交答案后,阅读别人的解法,特别是得票较高的解法。
- 第三步:对比反思。找出别人用到而自己没有想到的写法和函数。
- 第四步:吸收内化。在下一道题中主动使用新学到的写法。
掌握的套路越多,越能把常见的解题步骤当作一个整体来使用,从而在更高的抽象层次上思考。
1.4 我需不需要理解某些“概念”?
追究概念的“本质”是非常难的。许多概念的演变,涉及复杂的历史过程,涉及十分基础的数学、逻辑等理论原理。关于编程语言理论的很多讨论超出了本教程的范围——很多时候,本教程只讲应用。
2. 学习循环
读代码不等于学得会。取一个短示例,在不运行的情况下先写出预期输出;再运行原始程序,确认预测。之后每次只改动一处——一个字面量、一个条件、一条语句——重新预测并运行,记录行为的变化。解释差异时,区分哪些结论来自 ISO C 的规则,哪些只来自当前实现。
把得到的规则用于一个新的小程序,这一轮才算走完。实践是检验真理的唯一标准,敲过才算学过。
3. 查找可靠资料
3.1 先读诊断,再搜索
遇到编译或运行错误,先完整阅读诊断,找到首条错误及其源代码位置。请 AI 解释诊断时,一并附上最小代码、编译命令和完整输出。
需要搜索时,Google、Bing、DuckDuckGo 都可以。搜索时带上准确的接口名、诊断原文、编译器名称和标准版本;先缩小问题,再寻找资料。
3.2 手册、标准与代码
遇到语言或库接口问题时,优先核对标准文本和标准库参考资料;遇到编译器支持问题时,再看对应实现的官方文档;实验结果用于验证当前环境,不能单独证明所有实现都具有相同行为。自然语言是注释,代码更重要。
博客只能作为线索。可以发博客分享自己的心得或提出自己的疑问,但 CSDN 这种地方还是少逛为妙。
找几个函数练手:在 C 参考手册中查找 printf、malloc、strlen 和 assert;再挑同一个问题,对比标准资料、实现文档和博客给出的结论。
4. 用 AI 辅助学习
本节讨论范围
人工智能这个词涵盖的领域非常广。本节主要讨论当下常用于辅助学习和编程的生成式 AI:它通常以大语言模型 (Large Language Model, LLM) 为核心,也可以通过工具调用、代码执行、文件读写、联网检索、MCP 等能力组成 AI Agent,完成更复杂的多步骤任务。
了解一下 Prompt Engineering、AI Agent 和 MCP。想了解更多 AI 知识,可以去 AI Engineer Roadmap 获取相关学习路线。
目前主流的大语言模型和 AI Agent 在幻觉问题上已经有了很大改善,语法、C 标准细节、编译器行为、库函数边界、工程配置,都可以大胆提问。只是最终落到代码里的结论,仍以实际编译和运行的结果为准。
不要向模型提交密钥、私人数据或未获授权的代码。(对于本教程,Gentorial 密钥保存在浏览器当中,不会发送到其他地方)
5. 推荐资源
5.1 网站
- C++ 参考手册 学习 C 和 C++ 必备网站(注:C 和 C++ 是不同的编程语言;这个网站虽然名字中带 C++,但是其中也有 C 语言的内容,阅读这部分内容即可)

- Compiler Explorer 在线编译器,支持生成汇编等多项功能,支持非常多的语言和多种编译器

- Codewars 偏实际应用的题目,注重语言特性和实践,需要登录后使用;成功解题之后可以看到所有人的解题方法并进行评价
登录后初始化账号,鼠标移动到左边打开侧边栏,点击 practice
5.2 C 书籍
C 程序设计语言 第 2 版:C 语言之父力作,它有个更熟悉的名字叫 K&R;
C Programming: A Modern Approach, 2nd Edition:优秀的入门书; 习题答案暂时见这里
C Primer Plus 第六版(中文版):C 语言的经典教材; 习题答案暂时见这里
Modern C:C 语言标准委员会成员 Jens Gustedt 编写,紧跟语言发展,但节奏较快;MCT 给出了这本书的中文翻译。
5.3 后续阅读
- SICP (Structure and Interpretation of Computer Programs) 第二版(用 Scheme 写的那个版本)
- CS:APP (Computer Systems: A Programmer’s Perspective)
- pl-docs
注:CS 自学指南 上面汇集了计算机各个领域的课程资料。