编辑推荐
null
内容简介
C语言已经有几十年的历史了。经过长时间的发展和普及,C语言的应用场景有了很大的变化,一些旧观念应该被淡化或者不再被推荐。 本·克莱蒙著的《C程序设计新思维(第2版)》展现了传统C语言教科书所不具有相关技术。全书分为开发环境和语言两个部分,从编译、调试、测试、打包、版本控制等角度,以及指针、语法、文本、结构、面向对象编程、函数库等方面,对C程序设计的核心知识进行查缺补漏和反思。本书鼓励读者放弃那些对大型机才有意义的旧习惯,拿起新的工具来使用这门与时俱进的简洁语言。 本书适合有一定基础的C程序员和C语言学习者阅读,也适合想要深入理解C语言特性的读者参考。
作者介绍
自从于加州理工学院获得社会科学博士后,Ben Klemens就一直从事统计分析和人口的计算机辅助建模工作。他的观点是,写代码一定应该是趣味横生的,并先后非常愉快地为布鲁金斯学会、世界银行、美国国家精神健康中心等机构写过分析和建模代码(主要是C代码)。他作为布鲁金斯学会的非常驻研究员,与自由软件基金会一道,做了很多工作来确保有创意的程序员拥有保留其作品使用权的权利。他目前为美国联邦政府工作。
目 录
第1部分 开发环境 第1章 准备方便的编译环境 1.1 使用包管理工具 1.2 在Windows下编译C程序 1.2.1 Windows中的POSIX环境 1.2.2 在POSIX环境中编译C语言 1.2.3 在非POSIX环境中编译C语言 1.3 链接函数库的方式 1.3.1 一些我喜欢的选项 1.3.2 路径 1.3.3 运行时连接 1.4 使用makefile 1.4.1 设定变量 1.4.2 规则 1.5 以源文件的方式使用库 1.6 以源文件的方式使用库(即使你的系统管理员不想叫你这么做) 1.7 通过here来编译C程序 1.7.1 在命令行里包含头文件 1.7.2 统一的头文件 1.7.3 here文档 1.7.4 从stdin中编译 第2章 调试、测试和文档 2.1 使用调试器 2.1.1 调试的侦探故事 2.1.2 GDB变量 2.1.3 打印结构 2.2 利用Valgrind检查错误 2.3 单元测试 2.3.1 把程序用作库 2.3.2 测试覆盖 2.4 错误检查 2.4.1 在错误中的用户的角色? 2.4.2 用户工作的上下文环境 2.4.3 如何返回错误信息 2.5 编制文档 2.5.1 Doxygen 2.5.2 用CWEB解释代码 第3章 打包项目 3.1 shell 3.1.1 用shell命令的输出来替换命令 3.1.2 用shell的循环来处理一组文件 3.1.3 针对文件的测试 3.1.4 fc 3.2 makefile还是shell脚本 3.3 用Autotools打包代码 3.3.1 一个Autotools的示例 3.3.2 用makefile.am来描述makefile 3.3.3 配置脚本 第4章 版本控制 4.1 通过diff查看差异 4.2 Git的对象 4.3 树和它们的分支 4.3.1 融合 4.3.2 迁移 4.4 远程版本库 第5章 协助开发 5.1 动态装载 5.2 流程 5.2.1 为外来语言写程序 5.2.2 包装函数 5.2.3 跨越边境的代理数据结构 5.2.4 链接 5.3 与Python一起工作 5.3.1 编译与连接 5.3.2 Automake的条件子目录 5.3.3 Autotools支持下的Distutils 第2部分 语言 第6章 玩转指针 6.1 自动、静态和手工内存 6.2 持久性的状态变量 6.3 不使用malloc的指针 6.3.1 结构被复制,数组创建别名 6.3.2 malloc和内存操纵 6.3.3 错误来源于星号 6.3.4 你需要知道的各种指针运算 6.3.5 将typedef作为一种教学工具 第7章 教科书不应该再过多介绍的C语言语法 7.1 不需要明确地从main函数返回 7.2 让声明的位置更灵活 7.3 减少类型转换 7.4 枚举和字符串 7.5 标签、goto、switch和break 7.5.1 探讨goto 7.5.2 switch 7.6 被摒弃的float 7.7 比较无符号整型数 7.8 安全的将字符串解析成数字 第8章 那些C语言教科书经常不讲解的语法 8.1 营造健壮和繁盛的宏 8.1.1 预处理器技巧 8.1.2 测试宏 8.1.3 避免头文件重复包含 8.2 static和extern链接 8.3 const关键字 8.3.1 名词-形容词形式 8.3.2 压力 8.3.3 深度 8.3.4 char const **问题 第9章 简单的文本处理 9.1 使用asprintf,使字符串的处理不再那么痛苦 9.1.1 安全 9.1.2 常量字符串 9.1.3 用asprintf扩展字符串 9.1.4 strtok的赞歌 9.2 Unicode 9.2.1 C代码的编码 9.2.2 Unicode函数库 9.2.3 示例代码 第10章 更好的结构 10.1 复合常量 10.2 可变参数宏 10.3 安全终止的列表 10.4 多列表 10.5 Foreach 10.6 函数的向量化 10.7 指定的初始化器 10.8 用零初始化数组和结构 10.9 typedef可以化繁为简 10.10 从函数返回多个数据项 10.11 灵活的函数输入 10.11.1 把函数声明为printf风格 10.11.2 可选参数和命名参数 10.11.3 使无聊的函数焕发光彩 10.12 void指针以及它所指向的结构 10.12.1 具有通用输入的函数 10.12.2 通用结构 第11章 C语言面向对象编程 11.1 扩展结构和字典 11.1.1 实现一个字典 11.1.2 C,更少的缝隙 11.2 你结构中的函数 11.3 作用域 11.4 用操作符重载进行重载 11.5 引用计数 11.5.1 示例:一个子字符串对象 11.5.2 一个基于代理的组构造模型 11.5.3 结论 第12章 多线程 12.1 环境 12.2 OpenMP 12.2.1 编译OpenMP、pthreads和C原子(atom) 12.2.2 冲突 12.2.3 映射缩减 12.2.4 多任务 12.3 线程本地 12.4 共享资源 12.5 pthread 12.6 C原子 第13章 函数库 13.1 GLib 13.2 POSIX 13.2.1 解析正则表达式 13.2.2 为巨大的数据集合使用mmap 13.3 GNU科学计算库 13.4 SQLite 13.5 libxml和cURL 附录A C101 后记 术语表
媒体评论
null