书籍详情
从缺陷中学习C/C++
作者:刘新浙 ,刘玲 ,王超 等著
出版社:人民邮电出版社
出版时间:2013-09-01
ISBN:9787115321596
定价:¥39.00
购买这本书可以去
内容简介
C/C++是广泛用于系统和应用软件开发的语言,也是使用最为广泛的编程语言。C/C++易学难用,尤其C++,经过20多年的发展,已经变得非常复杂,给编程人员带来了很大的挑战。那么如何在工程项目中用好C/C++语言、如何绕过Bug构建稳定可靠的生产系统、如何以最快速度全面了解C/C++编程中的陷阱和障碍,编写出健壮可靠的代码呢?《从缺陷中学习C/C++》将通过102个案例,帮助程序员尽快从新手成长为专家。案例涵盖基础问题、编译问题、库函数问题、文件处理、类和对象、内存使用、多线程问题、性能问题等。读者每掌握一个案例就掌握了一个或几个知识点,就能避免一类问题。由于是从大量编程中总结出来的具体Bug案例中学习,这种学习方式更直接,让人印象更深刻。《从缺陷中学习C/C++》将为你成为C和C++高手、编写出完美的程序助一臂之力。《从缺陷中学习C/C++》适合程序员、测试人员以及C和C++初学者使用,也可以作为各大专院校和培训学校的教学用书。
作者简介
暂缺《从缺陷中学习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章 编译问题
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 小结
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 小结
猜您喜欢