从缺陷中学习C/C++

从缺陷中学习C/C++

作者:刘新浙刘玲王超 等

出版社:人民邮电

出版年:2014年5月

ISBN:9787115321596

所属分类:成功励志

书刊介绍

《从缺陷中学习C/C++》内容简介

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

相关推荐

微信二维码