C程序设计新思维(第2版) 7115460957,9787115460950

配送至
$ $ USD 美元

编辑推荐

深入解析C语言特性,塑造编程新思维。通过独辟蹊径的C语言解说之道,展示C语言的编程技巧和优势,带领读者发掘C的魅力,更好地利用C进行程序设计与开发。本书适合普通程序员和高校计算机相关专业的学生阅读,更适合对C情有独钟的人深度学习。

媒体推荐

本书可以帮你解决诸多C编程中常见的问题,并展示新的工具如何使C编程更加容易,以此来帮助读者调试程序、跟踪内存泄露、组织编译过程以及管理代码版本。

作者简介

自从于加州理工学院获得社会科学博士后,Ben Klemens就一直从事统计分析和人口的计算机辅助建模工作。他的观点是,写代码一定应该是趣味横生的,并先后非常愉快地为布鲁金斯学会、世界银行、美国国家精神健康中心等机构写过分析和建模代码(主要是C代码)。他作为布鲁金斯学会的非常驻研究员,与自由软件基金会一道,做了很多工作来确保有创意的程序员拥有保留其作品使用权的权利。他目前为美国联邦政府工作。

目录

第1部分开发环境
第1章准备方便的编译环境3
1.1使用包管理工具4
1.2在Windows下编译C程序6
1.2.1Windows中的POSIX环境7
1.2.2在POSIX环境中编译C语言8
1.2.3在非POSIX环境中编译C语言9
1.3链接函数库的方式10
1.3.1一些我喜欢的选项12
1.3.2路径13
1.3.3运行时连接16
1.4使用makefile16
1.4.1设定变量17
1.4.2规则20
1.5以源文件的方式使用库24
1.6以源文件的方式使用库(即使你的系统管理员不想叫你这么做)25
1.7通过here来编译C程序27
1.7.1在命令行里包含头文件27
1.7.2统一的头文件28
1.7.3here文档29
1.7.4从stdin中编译30
第2章调试、测试和文档32
2.1使用调试器32
2.1.1调试的侦探故事34
2.1.2GDB变量43
2.1.3打印结构45
2.2利用Valgrind检查错误49
2.3单元测试51
2.3.1把程序用作库54
2.3.2测试覆盖55
2.4错误检查56
2.4.1在错误中的用户的角色?56
2.4.2用户工作的上下文环境58
2.4.3如何返回错误信息60
2.5编制文档60
2.5.1Doxygen61
2.5.2用CWEB解释代码62
第3章打包项目65
3.1shell66
3.1.1用shell命令的输出来替换命令66
3.1.2用shell的循环来处理一组文件68
3.1.3针对文件的测试70
3.1.4fc73
3.2makefile还是shell脚本75
3.3用Autotools打包代码77
3.3.1一个Autotools的示例79
3.3.2用makefile.am来描述makefile82
3.3.3配置脚本87
第4章版本控制92
4.1通过diff查看差异93
4.2Git的对象94
4.3树和它们的分支99
4.3.1融合100
4.3.2迁移102
4.4远程版本库103
第5章协助开发106
5.1动态装载106
5.2流程109
5.2.1为外来语言写程序110
5.2.2包装函数110
5.2.3跨越边境的代理数据结构111
5.2.4链接112
5.3与Python一起工作113
5.3.1编译与连接114
5.3.2Automake的条件子目录114
5.3.3Autotools支持下的Distutils116
第2部分语言
第6章玩转指针121
6.1自动、静态和手工内存121
6.2持久性的状态变量125
6.3不使用malloc的指针127
6.3.1结构被复制,数组创建别名129
6.3.2malloc和内存操纵132
6.3.3错误来源于星号133
6.3.4你需要知道的各种指针运算134
6.3.5将typedef作为一种教学工具137
第7章教科书不应该再过多介绍的C语言语法139
7.1不需要明确地从main函数返回139
7.2让声明的位置更灵活140
7.3减少类型转换143
7.4枚举和字符串145
7.5标签、goto、switch和break147
7.5.1探讨goto147
7.5.2switch150
7.6被摒弃的float151
7.7比较无符号整型数154
7.8安全的将字符串解析成数字154
第8章那些C语言教科书经常不讲解的语法158
8.1营造健壮和繁盛的宏158
8.1.1预处理器技巧162
8.1.2测试宏166
8.1.3避免头文件重复包含168
8.2static和extern链接170
8.3const关键字173
8.3.1名词—形容词形式174
8.3.2压力175
8.3.3深度176
8.3.4charconst**问题177
第9章简单的文本处理180
9.1使用asprintf,使字符串的处理不再那么痛苦180
9.1.1安全183
9.1.2常量字符串184
9.1.3用asprintf扩展字符串185
9.1.4strtok的赞歌187
9.2Unicode192
9.2.1C代码的编码194
9.2.2Unicode函数库195
9.2.3示例代码196
第10章更好的结构200
10.1复合常量201
10.2可变参数宏202
10.3安全终止的列表204
10.4多列表205
10.5Foreach206
10.6函数的向量化207
10.7指定的初始化器209
10.8用零初始化数组和结构211
10.9typedef可以化繁为简212
10.10从函数返回多个数据项214
10.11灵活的函数输入218
10.11.1把函数声明为printf风格219
10.11.2可选参数和命名参数221
10.11.3使无聊的函数焕发光彩223
10.12void指针以及它所指向的结构229
10.12.1具有通用输入的函数229
10.12.2通用结构234
第11章C语言面向对象编程240
11.1扩展结构和字典241
11.1.1实现一个字典243
11.1.2C,更少的缝隙247
11.2你结构中的函数253
11.3作用域261
11.4用操作符重载进行重载264
11.5引用计数268
11.5.1示例:一个子字符串对象268
11.5.2一个基于代理的组构造模型273
11.5.3结论280
……
第12章多线程281
第13章函数库311
附录AC101329
后记348
术语表349

文摘

版权页:

插图:

以前Git总是保存一个快照,除非你运行git gc(垃圾清扫)来把整套的快照压缩为一组差异(或者叫diff)。用户抱怨必须记得去运行git gc,所以它现在是在一定的命令后自动执行这个动作,意味着Git可能是(但也并不总是)以diff的形式存储的。
产生一个提交对象后,你与它的互动将主要是查看它的内容了。你可以用git diff来查看有哪些改变,也就是提交对象的核心,以及git log来看元数据。
关键的元数据是对象的名字,它对用户不友好但是却有其存在意义的:SHA1 hash,一个40位的十六进制数值被赋值给一个对象,我们可以假设没有2个对象有同样的hash值,且同样的对象将在版本库中的每个版本使用同样的hash值。当你产生了提交对象,你将在屏幕上看到这个对象的hash数值的最前的几个数字,并且你可以运行git log来看当前提交对象的历史提交对象列表。列表中有每个提交的hash数值和当你提交的时候写的人类语言信息(并参见git help log以了解其他的可用元数据)。幸运的是,你只需要hash值的前几位(只要不和其他提交的hash值重复就行)就能提供......的的标识以区分你的提交。
ISBN7115460957,9787115460950
出版社人民邮电出版社
作者本·克莱蒙 (Ben Klemens)
尺寸16