展开全部

主编推荐语

为你成为C和C++高手、编写出完美的程序助一臂之力。

内容简介

C/C++是广泛用于系统和应用软件开发的语言,也是使用最为广泛的编程语言。C/C++易学难用,尤其C++,经过20多年的发展,已经变得非常复杂,给编程人员带来了很大的挑战。那么如何在工程项目中用好C/C++语言、如何绕过Bug构建稳定可靠的生产系统、如何以最快速度全面了解C/C++编程中的陷阱和障碍,编写出健壮可靠的代码呢?《从缺陷中学习C/C++》将通过102个案例,帮助程序员尽快从新手成长为专家。案例涵盖基础问题、编译问题、库函数问题、文件处理、类和对象、内存使用、多线程问题、性能问题等。读者每掌握一个案例就掌握了一个或几个知识点,就能避免一类问题。由于是从大量编程中总结出来的具体Bug案例中学习,这种学习方式更直接,让人印象更深刻。

目录

  • 版权信息
  • 内容提要
  • 本书作者
  • 致谢
  • 前言
  • 第1章 基础问题
  • 1.1 运算符优先级引起的问题
  • 1.2 不加括号的宏定义引起的错误
  • 1.3 污染环境的宏定义
  • 1.4 多语句宏定义使用错误
  • 1.5 char转为int时高位符号扩展的问题
  • 1.6 int转为char时的数据损失
  • 1.7 非法的数组下标
  • 1.8 有符号int与无符号int比较的后果
  • 1.9 有符号的困惑
  • 1.10 整除的精度问题
  • 1.11 浮点数比较的精度问题
  • 1.12 最小负整数取相反数溢出
  • 1.13 临时变量溢出
  • 1.14 size_t导致的死循环
  • 1.15 误用short引起缓冲区溢出
  • 1.16 区分continue和return
  • 1.17 指针常量和常量指针的区别
  • 1.18 字符数组和指针不总是等价的
  • 1.19 结构体成员变量初始化的隐患
  • 1.20 返回值非void的函数没有返回值
  • 1.21 cin>>和getline混用导致的奇怪问题
  • 1.22 小结
  • 第2章 编译问题
  • 2.1 动态链接库加载错误版本
  • 2.2 相同名称静态库的链接顺序
  • 2.3 使用命名空间来区分不同cpp中的同名类
  • 2.4 C++模板编译时依赖名称查找
  • 2.5 违背ODR原则可能会带来的意想不到的问题
  • 2.6 变量共用内存时使用O2优化编译
  • 2.7 小结
  • 第3章 库函数问题
  • 3.1 sprintf函数引起的缓冲区溢出
  • 3.2 snprintf函数format参数的问题
  • 3.3 错误使用snprintf函数返回值
  • 3.4 字符串复制不完整
  • 3.5 string类的c_str方法使用不当
  • 3.6 string类的“[]”操作符使用不正确
  • 3.7 不正确的字符串比较
  • 3.8 strncpy函数没有复制结束符
  • 3.9 调用memcpy函数前未初始化缓冲区
  • 3.10 误用sizeof操作符取字符串长度
  • 3.11 string类find函数返回值判定
  • 3.12 stringstream的清空
  • 3.13 调用strptime函数前需初始化tm
  • 3.14 使用feof函数的陷阱
  • 3.15 for循环中调用vector容器insert函数
  • 3.16 multiset容器erase函数的误用
  • 3.17 慎用容器类erase函数的返回值
  • 3.18 for循环中调用vector容器erase函数
  • 3.19 getopt函数参数问题
  • 3.20 不用errno判断系统调用是否成功
  • 3.21 strcat函数造成的段错误
  • 3.22 危险的strdup函数
  • 3.23 小结
  • 第4章 文件处理
  • 4.1 程序异常退出时未关闭已打开文件
  • 4.2 目录打开后未关闭
  • 4.3 写文件没有调用fflush
  • 4.4 读文件fread的返回值不能忽略
  • 4.5 getline()使用不当导致的死循环
  • 4.6 未重置流状态导致读文件错误
  • 4.7 小结
  • 第5章 类和对象
  • 5.1 对象的浅复制
  • 5.2 构造函数中的操作符重载
  • 5.3 拷贝构造函数不能模板化
  • 5.4 析构函数未捕获异常引发coredump
  • 5.5 构造函数中抛出异常引起内存泄露
  • 5.6 多态性未生效
  • 5.7 基类成员函数被隐藏
  • 5.8 匿名对象引起的内存泄露
  • 5.9 基类非虚析构函数引发内存泄露
  • 5.10 删除void*指针引发内存泄露
  • 5.11 STL容器不会自动释放指针指向的对象
  • 5.12 静态成员类内初始化
  • 5.13 union作为类的成员时需要构造函数
  • 5.14 成员函数尾部缺失const标注
  • 5.15 使用memset初始化class
  • 5.16 dynamic_cast转换失败返回NULL
  • 5.17 小结
  • 第6章 内存使用
  • 6.1 数组越界
  • 6.2 数组定义和值初始化形式混淆
  • 6.3 数组传参时的sizeof
  • 6.4 临时对象的生存期
  • 6.5 变量的作用域
  • 6.6 指针变量的传值和传址
  • 6.7 指针赋值和指针赋址的混淆
  • 6.8 指针释放后再次使用
  • 6.9 重复申请内存未释放
  • 6.10 delete与delete[]的区别
  • 6.11 函数中途退出忘记释放内存
  • 6.12 二维数组的内存泄露
  • 6.13 临时变量内存不能返回
  • 6.14 正确使用引用参数和引用返回值
  • 6.15 试图产生的指针很可能不存在
  • 6.16 结构体成员内存对齐问题
  • 6.17 String对象何时需delete
  • 6.18 小结
  • 第7章 多线程问题
  • 7.1 局部静态变量非线程安全
  • 7.2 string类append操作非线程安全
  • 7.3 中途退出造成的线程阻塞
  • 7.4 结构体位域成员线程安全问题
  • 7.5 多线程写文件引发内容被覆盖
  • 7.6 线程未join引起的内存泄露
  • 7.7 小结
  • 第8章 性能问题
  • 8.1 strlen用作循环条件影响性能
  • 8.2 STL容器list使用时忌频繁调用size()
  • 8.3 误用clear回收vector内存
  • 8.4 calloc在glibc高版本下性能劣于低版本下
  • 8.5 小结
  • 第9章 C/C++编程中其他问题
  • 9.1 中文截断成乱码
  • 9.2 不必要的类型转换
  • 9.3 不确定的函数参数赋值
  • 9.4 epoll边沿触发模式下的陷阱
  • 9.5 小结
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

人民邮电出版社

人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。