C/C++是广泛用于系统和应用软件开发的语言,也是使用最为广泛的编程语言。C/C++易学难用,尤其 C++,经过 20 多年的发展,已经变得非常复杂,给编程人员带来了很大的挑战。那么如何在工程项目中用好 C/C++语言、如何绕过 Bug 构建稳定可靠的生产系统、如何以最快速度全面了解 C/C++编程中的陷阱和障碍,编写出健壮可靠的代码呢?
目录
- 内容提要
- 序
- 前言
- 第 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 章 编译问题
- 第 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 章 文件处理
- 第 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 章 内存使用
- 第 7 章 多线程问题
- 第 8 章 性能问题
- 第 9 章 C/C++编程中其他问题
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论