Table of Contents 笨办法学C 中文版 前言 导言:C的笛卡尔之梦 练习0:准备 练习1:启用编译器 练习2:用Make来代替Python 练习3:格式化输出 练习4:Valgrind 介绍 练习5:一个C程序的结构 练习6:变量类型 练习7:更多变量和一些算术 练习8:大小和数组 练习9:数组和字符串 练习10:字符串数组和循环 练习11:While循环和布尔表达式 练习12:If,Else If,Else 练习13:Switch语句 练习14:编写并使用函数 练习15:指针,可怕的指针 练习16:结构体和指向它们的指针 练习17:堆和栈的内存分配 练习18:函数指针 练习19:一个简单的对象系统 练习20:Zed的强大的调试宏 练习21:高级数据类型和控制结构 练习22:栈、作用域和全局 练习23:认识达夫设备 练习24:输入输出和文件 练习25:变参函数 练习26:编写第一个真正的程序 练习27:创造性和防御性编程 练习28:Makefile 进阶 练习29:库和链接 练习30:自动化测试 练习31:代码调试 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 1.10 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.28 1.29 1.30 1.31 1.32 1.33 1.34 1.35 2 练习32:双向链表 练习33:链表算法 练习34:动态数组 练习35:排序和搜索 练习36:更安全的字符串 练习37:哈希表 练习38:哈希算法 练习39:字符串算法 练习40:二叉搜索树 练习41:将 Cachegrind 和 Callgrind 用于性能调优 练习42:栈和队列 练习43:一个简单的统计引擎 练习44:环形缓冲区 练习45:一个简单的TCP/IP客户端 练习46:三叉搜索树 练习47:一个快速的URL路由 后记:“解构 K&R C” 已死 捐赠名单 1.36 1.37 1.38 1.39 1.40 1.41 1.42 1.43 1.44 1.45 1.46 1.47 1.48 1.49 1.50 1.51 1.52 1.53 3 笨办法学C 中文版 笨办法学C 中文版 来源:Learn C The Hard Way 作者:Zed A. Shaw 译者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 Github 赞助我 协议 此版本遵循CC BY-NC-SA 4.0协议,原版无此约束。 4 前言 前言 原文:Preface 译者:飞龙 这是本书创作中的转储版本,所用的措辞可能不是很好,也可能缺失了一些章节, 但是你可以看到我编写这本书的过程,以及我的做事风格。 你也可以随时发送邮件到help@learncodethehardway.org来向我寻求帮助,我通常 会在1~2天之内答复。 这个列表是一个讨论列表,并不只允许发布公告,它用于讨论本书和询问问题。 最后,不要忘了我之前写过笨办法学Python,如果你还不会编程,你应该先读完 它。LCTHW并不面向初学者,而是面向至少读完LPTHW或者已经懂得一门其它编 程语言的人。 常见问题 这门课程需要多少时间? 你应该花一些时间直到你掌握它,并且每天都要坚持编写代码。一些人花了大约三 个月,其它人花了六个月,还有一些人只用了一个星期。 我需要准备什么样的电脑? 你需要OSX或者Linux来完成这本书。 5 导言:C的笛卡尔之梦 导言:C的笛卡尔之梦 原文:Introduction: The Cartesian Dream Of C 译者:飞龙 直到现在,凡是我当作最真实、最可靠而接受的东西,都是从感官或通过感官 得来的。不过,我有时觉得这些感官是骗人的,并且为了小心谨慎起见,对于 一经骗过我们的东西就决不完全加以信任。 勒内·笛卡尔,《第一哲学沉思录》 如果有一段引述用来描述C语言编程的话,那就是它了。对于大多数程序员,C是 极其可怕而且邪恶的。他就像是恶魔、撒旦,或者一个使用指针的花言巧语和对机 器的直接访问来破坏你生产力的骗子洛基。于是,一旦这位计算界的路西法将你缠 住,他就会使用邪恶的“段错误”来毁掉你的世界,并且揭露出与你交易中的骗局而 嘲笑你。 然而,C并不应由于这些事实而受到责备。你的电脑和控制它的操作系统才是真正 的骗子,而不是朋友。它们通过密谋来向你隐藏它们的真实执行逻辑,使你永远都 不真正知道背后发生了什么。C编程语言的失败之处只是向你提供接触背后真正工 作原理的途径,并且告诉了你一些难以接受的事实。C会向你展示痛苦的真像(红 色药丸),它将幕布拉开来向你展示一些神奇的原理。C即是真理。 既然C如此危险,为什么还要使用它?因为C给了你力量来穿越抽象的假象,并且 将你从愚昧中解放出来。 你会学到什么 这本书的目的是让你足够熟悉C语言,并能够使用它编写自己的软件,或者修改其 他人的代码。这本书的最后,我们会从一本叫做“K&R C”的名著中选取实际的代 码,并且用你学过的知识来做代码审查。你需要学习下面这些东西来达到这一阶 段: C的基本语法和编写习惯。 编译, make 文件和链接。 寻找和预防bug。 防御性编程实践。 使C的代码崩溃。 编写基本的Unix系统软件。 截至最后一章,你将会有足够的工具来解决基本的系统软件、库和其它小项目。 如何阅读本书 6 导言:C的笛卡尔之梦 这本书为那些已经掌握至少一门编程语言的人而设计。如果你还没有接触过编程, 我推荐你先学习笨办法学Python,这本书适用于真正的新手并且适合作为第一本编 程书。一旦你学会了Python,你可以返回来开始学习这本书。 对于那些已经学会编程的人,这本书的开头可能有些奇怪。它不像其它书一样,那 些书中你会阅读一段段的文字然后编写一些代码。相反,这本书中我会让你立即开 始编程,之后我会解释你做了什么。这样更有效果,因为你已经经历过的事情解释 起来更加容易。 由于采用了这样的结构,下面是本书中你必须遵守的规则: 手动输入所有代码。不要复制粘贴! 正确地输入所有代码,也包括注释。 运行代码并保证产生相同的输出。 如果出现了bug则修正它。 做附加题时,如果你做不出某道题,马上跳过。 在寻求帮助之前首先试着自己弄懂。 如果你遵守了这些规则,完成了本书的每一件事,并且还不会编程C代码的话,你 至少尝试过了。它并不适用于每个人,但是尝试的过程会让你成为一个更好的程序 员。 核心能力 我假设你之前使用为“弱者”设计的语言。这些“易用的”语言之一是Python或者 Ruby,它们带给了你草率的思维和半吊子的黑魔法。或者,你可能使用类似Lisp的 语言,它假设计算机是纯函数式的奇幻大陆,带有一些为婴儿准备的充气墙。再或 者你可能学过Prolog,于是你认为整个世界都是一个数据库,你可以从中寻找线 索。甚至更糟糕的是,我假设你一直都在用IDE,所以你的大脑布满了内存漏洞, 并且你每打三个字符都要按CTRL+空格来打出函数的整个名字。 无论你的背景如何,你都可能不擅长下面四个技能: 阅读和编写 如果你使用IDE这会尤其正确。但是总体上我发现程序员做了很多“略读”,并且在理 解上存在问题。它们会略读需要详细理解的代码,并且觉得他们已经理解了但事实 上没有。其它语言提供了可以让他们避免实际编写任何代码的工具,所以面对一种 类似C的语言时,他们就玩完了。你需要知道每个人都有这个问题,并且你可以通 过强迫自己慢下来并且仔细对待阅读和编写代码来改正它。一开始你可能感到痛苦 和无聊,但是这样的次数多了它也就变得容易了。 专注细节 每个人都不擅长这方面,它也是劣质软件的罪魁祸首。其它语言让你不会集中注意 力,但是C要求你集中全部注意力,因为它直接在机器上运行,并且机器比较挑 剔。C中没有“相似的类型”或者“足够接近”,所以你需要注意,再三检查你的代码, 并假设你写的任何代码都是错的,直到你能证明它是对的。 定位差异 7 导言:C的笛卡尔之梦 其它语言程序员的一个关键问题就是他们的大脑被训练来指出那个语言的差异,而 不是C。当你对比你的代码和我练习中的代码时,你的眼睛会跳过你认为不重要或 者不熟悉的字符。我会给你一些策略来强制你观察你的错误,但是要记住如果你的 代码并不完全像书中的代码,它就是错的。 规划和调试 我喜欢其它较简单的语言,因为我可以想怎么写就怎么写。我将已有的想法输入进 解释器,然后可以立即看到结果。你可以把你的想法试验出来,但是要注意,如果 你仍然打算“试验代码使其能够工作”,它就行不通了。C对于你来说稍困难,因为你 需要规划好首先创建什么。的确,你也可以进行试验,但是比起其他语言,你必须 在C中更早地严肃对待代码。我会教给你在编程之前规划程序核心部分的方法,这 对于使你成为更好的程序员十分有帮助。即使一个很小的规划,都会使接下来的事 情变得顺利。 学习C语言会使你变成更好的程序员,因为会强制你更早、更频繁地解决这些问 题。你不会再草率地编写半吊子的代码,代码也会能够正常工作。C的优势是,它 是一个简单的语言,你可以自己来弄清楚,这使得它成为用于学习机器,以及提升 程序员核心技能的最佳语言。 C比其它语言都要难,而这是由于C并不对你隐藏细节,它们在其它语言中都试图 并且未能被掩盖。 协议 原书在完稿之后可以自由分发,并且能在亚马逊上购买。该中译版本遵循CC BYNC-SA 4.0协议,你可以在保留署名和出处的前提下以非商业目的自由转载。 8 练习0:准备 练习0:准备 原文:Exercise 0: The Setup 译者:飞龙 在这一章中,你将为C语言编程配置好你的系统。一个好消息是对于所有使用Linux 或者Mac的人,你的系统是为C语言编程而设计的。C语言的创造者也对Unix操作系 统的创造做出了贡献,并且Linux和OSX都是基于Unix的。事实上,安装工作会非 常简单。 对于Windows上的用户,我有一个坏消息:在Windows上学习C非常痛苦。你可以 在Windows上编写C代码,这并不是问题。问题是所有的库、函数和工具都和其它 的C语言环境有些差异。C来自于Unix,并且和Unix平台配合得比较好。恐怕这是 一个你并不能接受的事实。 然而你并不需要为此恐慌。我并不是说要完全避免Windows。然而我说的是,如果 你打算以最短的时间来学习C,你需要接触Unix并适应它。这同时也对你有帮助, 因为懂得一些Unix的知识,也会让你懂得一些C编程的习惯,以及扩充你的技能。 这也意味着每个人都需要使用命令行。嗯,就是这样。你将会进入命令行并且键入 一些命令。不要

pdf文档 Learning C The Hard Way

计算机 > C/C++ > c_c++ > 文档预览
341 页 0 下载 427 浏览 0 评论 0 收藏 3.0分
温馨提示:如果当前文档出现乱码或未能正常浏览,请先下载原文档进行浏览。
Learning C The Hard Way 第 1 页 Learning C The Hard Way 第 2 页 Learning C The Hard Way 第 3 页 Learning C The Hard Way 第 4 页 Learning C The Hard Way 第 5 页
下载文档到电脑,方便使用
还有 336 页可预览,继续阅读
本文档由 user2020-12-27 08:36:03上传分享
给文档打分
您好可以输入 255 个字符
DocHub文库的中文名是什么?( 答案:多哈 )
评论列表
  • 暂时还没有评论,期待您的金玉良言