| 目录 |

1 前言

C 语言并不庞大,而一本厚重的书也未必能把它讲好。

——布莱恩·W·克尼汉、丹尼斯·M·里奇

各位,这儿就不多费口舌了,咱们直接跳进 C 代码里吧:

E((ck?main((z?(stat(M,&t)?P+=a+'{'?0: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 语言混乱代码大赛1某件参赛作品里的一小段。那是个绝妙的比赛,参赛者要尽量写出最让人读不懂的 C 代码,结果往往出人意料。

坏消息是,如果你是刚接触这一切的新手,你看到的所有 C 代码可能都像是被混淆过的!好消息是,这种情况不会持续太久。

在这本指南里,我们要做的就是把你从彻底、完全、纯粹的迷失与困惑中,一路带到那种只有通过纯粹的 C 编程才能获得的顿悟般的喜悦。就这么办。

早年间,C 是一门更简单的语言。1988 年 K&R 写出他们那本名著的第二版时,本书中相当一部分特性、以及《库参考》卷中许多特性都还不存在。尽管如此,这门语言的核心依然很小,我希望自己在这里的讲述方式是从那个简单的核心出发,再向外搭建。

这就是我为这么一门小巧简洁的语言写了这么一本大得可笑的书所找的借口。

1.1 读者对象

本指南假定你已经从另一门语言里掌握了一些编程知识,比如 Python2、JavaScript3、Java4、Rust5、Go6、Swift7 等等。(Objective-C8 的开发者会格外轻松!)

我们会假定你知道变量是什么、循环能做什么、函数怎么工作,等等。

如果出于某种原因你不是这样的读者,那我能提供的最好的东西,也就是点能让你读得开心的、货真价实的消遣了。我唯一能合理承诺的是:本指南不会以悬念结尾……真的不会吗?

1.2 如何阅读本书

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

第二卷是库参考9,它的参考成分远多于教程成分。

如果你是新手,大体上按顺序把教程部分读下来就好。章节越往后,按顺序读就越不重要。

无论你的水平如何,参考部分都摆在那儿,里面有标准库函数调用的完整示例,需要时可以随时帮你回忆起来。配一碗麦片读正合适,别的时间也行。

最后,翻看索引时(如果你读的是纸质版),参考部分的条目用的是斜体。

1.3 平台与编译器

我会尽量坚持用老派得不能再老派的ISO 标准 C10。嗯,大部分时候吧。偶尔我也可能发疯,开始聊起 POSIX11 之类的东西,不过到时候再说。

Unix 用户(如 Linux、BSD 等)可以试试从命令行运行 cc 或 gcc——你也许已经装好编译器了。如果没装,就在你的发行版里搜一下怎么安装 gcc 或 clang。

Windows 用户不妨看看 Visual Studio Community12。或者,如果你想要更接近 Unix 的体验(推荐!),就安装 WSL13 和 gcc。

Mac 用户则要安装 XCode14,尤其是其中的命令行工具。

市面上的编译器很多,几乎都能配合本书使用。而且 C++ 编译器也能编译很多(但不是全部!)C 代码。可能的话,最好还是用真正的 C 编译器。

1.4 官方主页

本文档的官方地址是 https://beej.us/guide/bgc/15。将来这个地址也许会变,但更可能发生的是其他所有指南都被迁出 Chico State 的计算机。

1.5 邮件政策

我一般乐意通过邮件答疑,所以尽管写信来,但我不保证一定回复。我的生活相当忙碌,有时候实在没法回答你的问题。碰到这种情况,我通常就直接把邮件删了。这不是针对谁;我只是永远也抽不出时间给你所需的详细解答。

一般来说,问题越复杂,我回复的可能性就越小。如果你能在发信前把问题缩小到具体范围,并且务必附上所有相关信息(比如平台、编译器、你遇到的错误信息,以及任何你认为有助于我排查的内容),那么你得到回复的可能性就大得多。

如果没收到回复,就再自己折腾折腾,试着找出答案;要是还是找不到,那就带着你找到的信息再写信给我,希望这些信息足够让我帮上忙。

既然我已经就该怎么写信、不该怎么写信访唠叨了半天,我还想让你知道:我非常感激这些年来这本指南得到的所有赞誉。这真是莫大的鼓舞,听说它被用于正途,我也很高兴!:-) 谢谢!

1.6 镜像

非常欢迎你镜像本站,公开或私下都可以。如果你公开镜像了本站,并希望我在主页上链接过去,就写信到 beej@beej.us 告诉我一声。

1.7 致译者

如果你想把这本指南译成其他语言,请写信到 beej@beej.us,我会在主页上链接你的译本。你可以在译本里加上自己的名字和联系方式。

请注意下面“版权与分发”一节中的许可限制。

《Beej 的 C 编程指南》版权 © 2021 Brian “Beej Jorgensen” Hall。

除下文所述的源代码与译本这两项特定例外,本作品采用 Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 许可协议授权。要查看该许可协议的副本,请访问 https://creativecommons.org/licenses/by-nc-nd/3.0/,或写信到 Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA。

对许可协议中“No Derivative Works”(禁止演绎)部分的一项特定例外如下:本指南可以自由翻译成任何语言,前提是译文准确,并且指南被完整重印。译本适用与原指南相同的许可限制。译本中还可以包含译者的姓名和联系信息。

本文档中给出的 C 源代码在此归于公有领域,完全不受任何许可限制。

我们鼓励教育工作者自由地向学生推荐本指南或提供本指南的副本。

欲了解更多信息,请联系 beej@beej.us。

1.9 献词

写这些指南最难的事情是:

在这个过程中有很多人帮过我,我想感谢那些让这本书得以问世的人。

谢谢你们!♥


| 目录 |