万本电子书0元读

万本电子书0元读

顶部广告

C程序设计新思维电子书

  不理解C的人害怕它的威力,并认为它粗糙得不够安全。实际上C在所有的编程语言排名中一直都被认为是*流行的语言!   本书C语言的经典图书,与《C陷阱和缺陷》、《C专家编程》、《C和指针》等经典书籍齐名!   这本书与那些教科书的不同,在于对这门语言及其发环境行了拾遗补漏。书中讲解的方式是,使用提供了表结构和XML解析器的现成的库,而不是把这些从头再写一次。这本书也体现了如何编写易读代码和用户友好的函数口。

售       价:¥

纸质售价:¥33.80购买纸书

123人正在读 | 2人评论 6.2

作       者:[美]克莱蒙(Ben Klemens)著

出  版  社:人民邮电出版社

出版时间:2015-05-01

字       数:14.5万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(2条)
  • 读书简介
  • 目录
  • 累计评论(2条)
C语言已经有40年的历史了。经过长时间的发展和普及,C语言应用场景有了很大的变化,的一些旧观念应该被淡化或者不再被推荐。 《C程序设计新思维》展现了传统C教科书所不具有的*的相关技术。全书分为发环境和语言两个部分,分别从编译、调试、测试、包、版本控制等角度,以及指针、语法、文本、结构、面向对象编程、库等主题,对C程序设计的核心知识行查缺补漏和反思。本书鼓励读者放弃那些对大型机才有意义的旧习惯,拿起新的工具来使用这门与时俱的简洁语言。 《C程序设计新思维》适合有一定基础的C程序员或C语言学习者阅读,也适合想要较为深地理解C语言特性的读者参考。<br/>【推荐语】<br/>不理解C的人害怕它的威力,并认为它粗糙得不够安全。实际上C在所有的编程语言排名中一直都被认为是*流行的语言! 本书C语言的经典图书,与《C陷阱和缺陷》、《C专家编程》、《C和指针》等经典书籍齐名! 这本书与那些教科书的不同,在于对这门语言及其发环境行了拾遗补漏。书中讲解的方式是,使用提供了表结构和XML解析器的现成的库,而不是把这些从头再写一次。这本书也体现了如何编写易读代码和用户友好的函数口。<br/>【作者】<br/>Ben Klemens为布鲁金斯学会、世界银行、美国国家精神健康中心和美国政府编写统计分析和计算机模型。他与布鲁金斯学会和自由软件基金会一起合作,确保程序员保留其作品使用权的权利。<br/>
目录展开

内容提要

作者简介

封面介绍

前言

C就是Punk Rock

Q&A(本书的参考引用)[3]

标准:难以抉择

K&R(1978前后)

ANSI C89

ISO C99

C11

POSIX标准

Unix

POSIX

BSD

GNU

注释

本书使用的排版约定

使用示例代码

第一部分 开发环境

第1章 准备方便的编译环境

1.1 使用包管理器

1.2 在Windows下编译C

1.2.1 Windows中的POSIX环境

第2章 调试、测试和文档

2.1 使用调试器

2.1.1 GDB变量

2.1.2 打印结构

例2-1 一组用于在GDB中方便地显示链表的宏——关于你可能会用到的最善于阐述的调试宏(gdb_showlist)

例2-2 一些尝试调试的示例代码,或者一个对Glib链表的快速介绍(glist.c)

2.2 利用Valgrind检查错误

2.3 单元测试

例2-3 一个对字典的测试,参见“11.2.2实现一个字典”(dict_test.c)

2.3.1 把程序用作库

2.3.2 测试覆盖

例2-4 一个测试代码编译脚本,用于覆盖测试、运行测试和检查未被执行的程序行的测试代码(gcov.sh)

2.4 编制文档

2.4.1 Doxygen

叙事

2.4.2 用CWEB解释代码

2.5 错误检查

2.5.1 在错误中的用户参与是什么?

2.5.2 用户工作的上下文环境

例2-5 一个处理错误的宏:报告或记录他们,并让用户来决定是遇到错误即停止,还是继续运行(stopif.h)

2.5.3 如何返回错误信息

第3章 打包项目

3.1 shell

3.1.1 用shell命令的输出来替换命令

例3-1 利用shell变量和POSIX工具计算行数(linecount.sh)

3.1.2 用shell的循环来处理一组文件

例3-2 对于每个十进制数i,在文本文件中寻找(非数字的)i序列;并计数(benford.sh)

3.1.3 针对文件的测试

例3-3 一个为test建立的if/then语句——反复运行它几次(.iftest.sh;.iftest.sh;. iftest.sh)观察下test文件的产生和消亡(iftest.sh)。

3.1.4 fc

3.2 makefile还是shell脚本

例3-4 把一个if/then和一个测试放在一个makefile中(make_bit)

3.3 用Autotools打包代码

3.3.1 一个Autotools的示例

例3-5 打包Hello, World。(auto.conf)

3.3.2 用makefile.am来描述makefile

1.形式变量

2.内容变量

3.添加测试

例3-6 一个处理测试的Automake文件(dict.automake)

4.添加makefile位

3.3.3 配置脚本

更多的shell位

第4章 版本控制

第5章 和谐共处

5.1 过程

5.1.1 作为外来语言写程序

5.1.2 包装函数

5.1.3 跨越边境的代理数据结构

例5-1 将一个指针按照普通整数来处理是完全可行的——在纯粹的C中没有什么理由要这么做,但是在与一个宿主语言工作时却可能是必要的(size_t.c)

5.1.4 连接

5.2 与Python一起工作

例5-2 理想气体函数的包装函数(py/ideal.py.c)

5.2.1 编译与连接

5.2.2 Automake的条件子目录

例5-3 一个用于Python编译任务的configure.ac文件(py/configure.ac)

例5-4 一个为带有Python子目录的项目主目录准备的Makefile.am(py/Makefile.am)

5.2.3 Autotools支持下的Distutils

例5-5 一个用来控制一个Python包的产生的setup.py文件(py/setup.py)

例5-6 配置Automake以驱动Python的Distutils(py/Makefile.py.am)

第二部分 语言

第6章 玩转指针

6.1 自动、静态和手工内存

6.2 持久性的状态变量

例6-1 由一个状态机所生成的菲波那契数列(fibo.c)

6.3 不使用malloc的指针

6.3.1 结构被复制,数组创建别名

例6-2 不需要逐个复制结构的每个成员(copystructs.c)

例6-3 结构被复制,但是把一个数组设置为另一个数组只是创建了一个别名(copystructs2.c)

例6-4 可以从一个函数中结构,但不能直接返回数组(automem.c)

例6-5 复制一个数组需要使用memcpy,它已经过时,但是能够完成任务(memcpy.c)

6.3.2 malloc和内存操纵

6.3.3 错误来源于星号

6.3.4 你需要知道的各种指针运算

例6-6 一些简单的指针运算(arithmetic.c)

例6-7 我们可以利用p++表示“前进到下一个指针”实现循环的流水化 (pointer_arithmetic1.c)

typedef作为一种教学工具

例6-8 添加一个typedef声明使笨拙的代码稍稍变得清晰(pointer_arithmetic2.c)

第7章 可以忽略的C语法

7.1 不需要明确地从main函数返回

7.2 让声明流动

在运行时设置数组的长度

7.3 减少类型转换

7.4 枚举和字符串

7.5 标签、goto、switch和break

7.5.1 考虑goto

例7-1 使用goto作为错误条件的清晰通道

7.5.2 switch

例7-2 用自己的NaN标记来注释自己的浮点数据(na.c)

7.6 被摒弃的float

例7-3 float能够存储这么多的不同数字(floatfail.c)

例7-4 病态的数据:不再成为大问题(stddev.c)

第8章 障碍和机遇

8.1 营造健壮和繁盛的宏

例8-1 我们可以用花括号控制变量的作用域,就像典型的非宏代码一样(curly.c)

预处理器技巧

例8-2 既被打印又被求值的文本(sizesof.c)

第9章 文本

9.1 使用asprintf,使字符串的处理不再痛苦

例9-1 创建字符串的乏味方法(sadstrings.c)

例9-2 这个版本只是从例9-1中删除了2行,但这2行却是最令人感觉痛苦的 (getstrings.c)

9.1.1 安全

9.1.2 常量字符串

9.1.3 用asprintf扩展字符串

例9-3 一个清晰地扩展字符串的宏(sasprintf.c)

9.1.4 strtok的赞歌

例9-4 一小组字符串工具的头文件(string_utilities.h)

例9-5 一些实用的字符串工具(string_utilities.c)

9.2 Unicode

9.2.1 C代码的编码

9.2.2 Unicode函数库

9.2.3 示例代码

例9-6 接收一个文本文件,并打印一些与它的字符有关的实用信息(unicode.c)

第10章 更好的结构

10.1 复合文字

例10-1 我们可以使用复合文字来绕过临时变量(sum_to_nan.c)

通过复合文字进行初始化

10.2 可变参数宏

例10-2 一个用于处理错误的宏,取自例2-5(stopif.h)

例10-3 宏的...覆盖了for循环的整个循环体(varad.c)

10.3 安全终止的列表

例10-4 使用一个可变参数宏生成一个复合文字(safe_sum.c)

10.4 Foreach

10.5 函数的向量化

例10-5 把接受任何指针类型的参数的任何函数进行向量化的机制(vectorize.c)

10.6 指定的初始化值

例10-6 使用指定的初始化值指定一个结构(boxes.c)

10.7 用零初始化数组和结构

10.8 typedef可以化繁为简

风格说明:

10.9 从函数返回多个数据项

例10-7 如果需要从一个函数中返回多个值,可以返回一个结构(papersize.c)

报告错误

例10-8 如果函数需要返回一个值和一个错误,可以使用一个结构来完成这个任务(errortuple.c)

10.10 灵活的函数输入

10.10.1 把函数声明为printf风格

例10-9 处理可变长度的输入的旧式方法(olden_varargs.c)

例10-10 宏版本具有更少的活动件(macro_varargs.c)

10.10.2 可选参数和命名参数

例10-11一个接受可变数量的命名参数的函数,不是由用户所设置的参数具有默认值(ideal.c)

10.10.3 使无聊的函数焕发光彩

例10-12 一个难以使用的函数,它具有太多的输入并且没有进行错误检查(amortize.c)

例10-13 头文件(大多具有文档描述)添加了一个宏和一个预备函数的头部(amortize.h)

例10-14 接口的非公共部分(amort_interface.c)

例10-15 现在可以使用amortization宏/函数编写易于阅读的假设分析场景(amort_use.c)

10.11 void指针以及它所指向的结构

10.11.1 具有通用输入的函数

例10-16 一个通用的目录递归函数的头文件(process_dir.h)

例10-17 一个显示当前目录结构树的程序(show_tree.c)

例10-18 对一个目录进行递归,对所找到的每个文件应用file_action,对找到的每个目录应用directory_action(process_dir.c)

10.11.2 通用结构

例10-19 unictr.c的头文件(unictr.h)

例10-20 围绕以Unicode字符为键和专用的计数器为值的散列所创建的函数(unictr.c)

例10-21 一个字符频率计数器;用法:charct your_dir |sort -k 2–n(charct.c)

第11章 C语言的面向对象编程

11.1 你所不明白的(以及为什么你不能不明白)

11.1.1 作用域

私有结构成员

11.1.2 用操作符重载进行重载

_Generic

例11-1 制作香肠的地方,如果你对GSL的复数类型感兴趣(complex.c)

例11-2 利用_Generic来为一团乱麻提供一个简单的前端处理(cplx.h)

例11-3 回报:我们(几乎)可以使用dot而不用考虑输入类型(simple_cplx.c)

11.2 扩展结构和字典

11.2.1 扩展一个结构

C,更少的缝隙

例11-4 一个在包装结构中的匿名子结构,无缝地融入包装结构(seamlessone.c)

例11-5 point结构被无缝地融入一个thresspoint,且我们仍然有一个函数的名字,用以使用操作一个point的结构的函数(seamlesstwo.c)

11.2.2 实现一个字典

例11-6 头文件,或者说是键-值类的公共部分(keyval.h)

例11-7 典型的键-值对象模板:一个带有new/copy/free的结构(keyval.c)

例11-8 字典结构的公共部分(dict.h)

例11-9 字典对象的实现(dict.c)

例11-10 字典对象的用法示例;不用深入了解结构的内部,因为接口函数提供了我们所需要的一切(dict_use.c)

11.2.3 基于指向对象的指针编码

11.3 你结构中的函数

11.4 引用计数

11.4.1 示例:一个子字符串对象

例11-11 冰山的公共部分(fstr.h)

例11-12 一个代表子字符串的对象(fstr.c)

例11-13 使用curl来或者Moby Dick的Gutenberg项目版本,然后用sed来去掉Gutenberg头部和脚注;你可能需要使用你的包管理器安装curl(find.moby)

例11-14 为cetology程序准备的makefile示例(cetology.make)

例11-15 一个例子,其中一本书被按章切分,而且每张的字数被计算(cetology.c)

11.4.2 一个基于代理的组构造模型

例11-16 group_s的公共部分(groups.h)

例11-17 group_s对象(groups.w)

例11-18 基于代理的模型,利用了group_s对象(groupabm.w)

第12章 库

12.1 GLib

12.2 POSIX

12.2.1 为巨大的数据集合使用mmap

例12-1 一个磁盘文件可以被透明地mmap到内存(mmap.c)

12.2.2 用Pthreads轻松实现线程

1.Pthreads列表

例12-2 一个为pthreads和GLib的makefile;其中gthread-2.0部分仅在你用GLib的mutex的时候才是必要的(pthreads.make)。

例12-3 在命令行中给出一个文件名列表,在每个线程中同时地计算词数(pthread.c)

2.用mutex保护线程资源

3.示例

例12-4 所有的次计数器一起运行(mutex_wc.c)

4._Thread_local和静态变量

12.3 GNU科学计算库

例12-5 找到与一组输入点距离之和最小的点(gsl_distance.c)

12.4 SQLite

查询

12.5 libxml和cURL

例12-6 解析一个简单格式输入的纽约时报的头条(nyt_feed.c)

后记

术语表

欢迎来到异步社区!

异步社区的来历

社区里都有什么?

购买图书

下载资源

与作译者互动

灵活优惠的购书

特别优惠

纸电图书组合购买

社区里还可以做什么?

提交勘误

写作

会议活动早知道

加入异步

累计评论(2条) 2个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部