在一个新的JavaScript框架几乎每天都在涌现的世界里,为什么要深入研究像C这样古老而基础的语言呢?首先,如果你希望跟上所有这些框架的潮流,你可能希望掌握一些提供许多“现代”语言基础的技术。你是否在像TIOBE这样的网站上查看过流行的编程语言,并发现C语言一直居于榜首?也许你对高级的显卡很感兴趣,想看看驱动它们的软件是如何工作的。或者你正在探索更新且更小巧的小玩意儿,比如Arduino,并听说C语言是上手这项工作的正确工具。
不管是什么原因,你能阅读本书真是太好了。C是一门基础语言,了解其语法和特点将使你具备非常持久的计算机语言素养,从而可以更轻松地掌握新的语言和风格。在编写设备驱动程序或操作系统的底层代码时,C语言(及其衍生语言C++)仍然被广泛使用。而物联网正为资源有限的微控制器注入新的活力,C语言非常适合在这些微型计算环境中充分发挥作用。
虽然本书专注于为有限运算能力的小型机器编写简洁、严密的代码,但我仍将从计算机编程的基础知识入手,介绍适用于任何地方的C语言的各种规则和模式。
本书旨在介绍适用于上述任何情况的良好C语言编程的所有基础知识。我将介绍控制结构、运算符、函数和C语言语法的其他元素,并举例说明可将编译程序的大小减少几个字节的替代模式,还将把Arduino环境作为精简C代码的绝佳应用。为了更好地学习Arduino部分,你应该具备一些构建简单电路以及使用LED和电阻器等元件的基本经验。
以下是各章的主要内容。
第1章简要介绍C语言的历史和设置开发环境的步骤。
第2章介绍C语言的语句,包括基本I/O、变量和运算符。
第3章介绍分支语句和循环语句,并对变量及其作用域进行深入探讨。
第4章介绍数据存储,展示C语言在数组中操作单个比特和存储大量大型数据的功能。
第5章介绍如何将代码分成易于管理的小块。
第6章介绍如何创建更复杂的数据结构,如何将这些结构传递给函数,以及如何从函数返回这些结构。
第7章介绍如何查找和使用常用的代码片段,帮助你完成常见任务或复杂任务。
第8章介绍如何设置Arduino开发环境,并让一些LED灯闪烁。
第9章通过完整的Arduino项目,介绍多种电子外设(包括传感器、按钮和LCD)的使用。
第10章介绍一些专门用于帮助小型处理器充分利用资源的代码编写技巧。
第11章通过介绍编写与Arduino IDE兼容的友好且文档齐全的库的技巧和窍门,进一步提高你的C语言库技能。
第12章是最后一章,在继续提高精益编码技能的过程中,你可以尝试快速完成一个物联网项目,并提出一些下一步尝试的想法。
附录包括我所使用的硬件和软件的链接,以及下载和配置书中所示的C和Arduino示例的信息。
本书中使用以下排版约定:
斜体 ( Italic )
表示新的术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width)
用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。
等宽粗体( Constant width bold )
表示应由用户直接输入的命令或其他文本。
等宽斜体( Constant width italic )
表示应由用户提供的值或由上下文确定的值替换的文本。
该图示表示提示或建议。
该图示表示一般性说明。
该图示表示警告或注意。
本书中的许多代码示例都非常简洁,手写输入往往会让你受益匪浅。但这并不总是有趣的,有时你想从已知的工作副本开始,然后修改内容。你可以从GitHub上获取所有示例的源代码,网址是 https://github.com/l0y/smallerc 。附录A提供了关于下载代码和设置文件以便在开发环境中使用的详细说明。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O'Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O'Reilly的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:
Smaller C:Lean Code for Small Machines ,作者Marc Loy,由O'Reilly出版,书号978-1-098-10033-9。
如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过 permissions@oreilly.com 联系我们。
40多年来,O'Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O'Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O'Reilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问 http://oreilly.com 。
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O'Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至 errata@oreilly.com.cn 。
本书配套网站 https://oreil.ly/smaller-c 上列出了勘误表、示例以及其他信息。
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站 http://oreilly.com 。
我们在Facebook上的地址: http://facebook.com/oreilly 。
我们在Twitter(现为X)上的地址: http://twitter.com/oreillymedia 。
我们在YouTube上的地址: http://youtube.com/oreillymedia 。
我要感谢Amelia Blevins在本书出版过程中的辛勤工作。她不仅拥有出色的项目管理技能,而且还通过巧妙的建议提高了我的写作能力。同时感谢Amanda Quinn和Suzanne McQuade在项目初期的帮助,以及Danny Elfanbaum提供的出色技术支持。O'Reilly整个团队是无与伦比的。
本书的技术审校人员提供了广泛的专业知识和宝贵的反馈。Tony Crawford优化了我关于C代码的讨论,我衷心推荐你阅读他的著作 Cina Nutshell 。Alex Faber在多个平台上运行了本书的每个示例,并确保我牢记新程序员的需求。Eric Van Hoose使我的写作更加清晰,并帮助我梳理了整本书的层次结构。Chaim Krause在最后一刻加入,指出了一些需要补充的内容。
感谢我的丈夫Ron对书稿的润色和全面支持。Reg Dyck也对我提供了不可或缺的鼓励。如果你真的想学好一个课题,那就向Reg和Ron这样的朋友和家人解释它吧。这两位先生对编程或电子学并不感兴趣,但他们友好的提问帮助我在许多困难的课题上找到了想要表达的核心观点。