这里没必要废话,伙计们,我们直接跳进 C 代码吧:

E((ck?main((z?(stat(M,&t)?P+=a+'{?'?:3:
execv(M,k),a=G,i=P,y=G&255,
sprintf(Q,y/'@'-3?A(*L(V(%d+%d)+%d,0)

他们从此过上了幸福快乐的生活。故事完。

这是什么?你说关于整个 C 语言的东西还有什么不清楚的吗?

嗯,说实话,我甚至不确定上面的代码具体做了什么。它是摘自 2001 年国际混淆 C 代码大赛(International Obfuscated C Code Contest)中的一个参赛作品,这是一场精彩的比赛,参赛者们试图写出最难以阅读的 C 代码,结果常常令人惊讶。

坏消息是,如果你是这个领域的新手,所有看到的 C 代码可能看起来都像混淆过的!好消息是,情况不会一直持续下去。

在本指南的过程中,我们将尝试引导你从完全迷茫的困惑,走向只有通过纯 C 编程才能获得的那种开悟的幸福。没错。

过去,C 是一种更简单的语言。本书中包含的大量特性以及《库参考手册》中很多特性,在 K&R(Kernighan 和 Ritchie)于 1988 年编写他们著名的第二版书籍时并不存在。尽管如此,这门语言的核心依然很小,我希望以一种从简单核心开始并向外扩展的方式来呈现它。

这也是我写这么一本在语言上明明很简洁却异常厚重的大书的理由。

1.1 Audience

本指南假设你已经具备了一些编程知识,可能是从其他语言学来的,比如 Python²、JavaScript³、Java⁴、Rust⁵、Go⁶、Swift⁷ 等等。(Objective-C⁸ 的开发者会觉得特别轻松!)

我们将假设你知道什么是变量,循环是干什么的,函数是如何工作的,等等。

如果出于某种原因这些都不适合你,我能提供的最好的就是为你的阅读乐趣带来一些诚实的娱乐。我唯一可以合理承诺的是,本指南不会以悬念结尾……或者会吗?

1.2 How to Read This Book

本指南分为两卷,这本是第一卷:教程卷!

第二卷是图书馆参考书⁹,更多的是参考资料而不是教程。

如果你是新手,通常建议按顺序阅读教程部分。章节越往后,按顺序阅读的重要性越小。

无论你的技能水平如何,参考部分都包含了标准库函数调用的完整示例,帮助你在需要时温故知新。非常适合一边吃早餐麦片或其他时间翻阅。

最后,如果你正在阅读纸质版,浏览索引部分时,参考条目是斜体字标注的。