内容简介
第一部分 代码开发技巧
第1章 编写好的代码
1.1谁需要本书?
1.2教学方法
1.3从何处开始阅读?
1.4警告!并非所有的C/C++编译器都完全相同
1.5语言无关的设计工具101
1.5.1准备
1.5.2模型!
1.5.3结构图、伪代码及IPO框图
1.6好的程序设计的五点要素
1.7规则意味着可以打破
1.7.1安塞尔亚当斯(Ansel Adams)或毕加索(Picasso)
1.7.2注释块
1.7.3标识符:identifiers、IDENTIFIERS和Identifiers
1.7.4间隔与缩进
1.8数据类型
1.9匈牙利表示法
1.9.1 MFC、句柄、控件及结构的命名规范
1.9.2一般前缀命名规范
1.9.3变量命名规范
1.9.5 Microsoft MFC宏命名规范
1.9.4应用程序符号命名规范
1.9.7静态库版本命名规范
1.9.8动态连接库命名规范
1.9.9 windows.h命名规范
1.9.6库标识符命名规范
1.10操作符优先级
1.11小结
第2章 使用编译器优化
2.1编码的责任与编译器的优化
2.2 Microsoft Visual C++的优化
2.2.2函数级连接
2.2.1调度指令
2.2.3字符串池
2.2.4使用register键字
2.2.5常量和复制的传播
2.2.6消除死代码和死存储
2.2.7删除冗余子表达式
2.2.8优化循环
2.2.9降低强度
2.2.10 inline键字的使用
2.2.12关闭堆栈检查
2.2.11省略帧指针
2.2.13覆盖堆栈
2.2.14函数调用之间允许使用别名
2.2.15全局优化
2.2.16产生内部函数的内联
2.2.17优化math.h
2.3 Microsoft C++的优化开关
2.4使用Microsoft Visual Studio设置编译器选项
2.4.1 Project Settings对话框中的General类型
2.4.2 Project Settings对话框中的Code Generation类型
2.4.5 Project Settings对话框中的Optimizations类型
2.4.4 Project Settings对话框中的Customize类型
2.4.3选择结构对齐方式
2.5建立发行版本的建议
2.6小结
第3章 逻辑与语法错误
3.1好的调试策略
3.2四种程序错误类型
3.2.1语法错误
3.2.2连接错误
3.2.3运行错误
3.3查看错误消息
3.2.4逻辑错误
3.4预防性维护
3.4.1桌面检查的含义
3.5异常处理设计
3.6“请多多支持”
3.7 Microsoft Visual C++的帮助
3.8小结
第4章 debugger
4.1确认Debugger可以使用
4.2启动Debugger
4.2.3 Run to Cursor
4.2.1 Step Into和Step Over的区别
4.2.2 Go
4.3理解Debugger工具栏图标
4.3.1 Restart
4.3.2 Stop Debugging
4.3.3 Break Execution
4.3.4 Apply Code Changes、Eidt and Continue
4.3.5 Show Next Statement
4.3.6 Step Into
4.3.11 Watch
4.3.10 QuickWatch
4.3.12 Variables
4.3.7 Step Over
4.3.8 Step Out
4.3.9 Run to Cursor
4.3.13 Regisers
4.3.14 Meomry
4.3.15 Call Stack
4.3.16 Disassembly
4.3.17 Debugger Toolbar Menu Equivalents
4.4.4 Modules
4.5.1 List Members
4.5本地菜单Debugger选项
4.4.1 Step Into Specific Function
4.4.3 Threads
4.4.2 Exceptions
4.4其他Debug菜单选项
4.5.2 Type Info
4.5.3 Parameter Information
4.5.4 Complete Word
4.5.7 Insert/Remove Breakpoint
4.6 Debugger窗口
4.5.5 Go To Definition/Reference
4.5.6 Go To Disassembly
4.6.1 Trace窗口
4.6.2 Watch窗口
4.7 View菜单和Debugger窗口
4.7.1 Workspace
4.7.2 Output
4.8以不同的数据类型查看观察变量
4.9打开Just-in-Time调试
4.10 Options窗口中的Debug标签
4.10.6 Parameter Types
4.10.10 Format
4.10.9 Address
4.10.8 Load COEF Exports
4.10.7 Return Value
4.10.1 Hexadecimal Display
4.10.5 Parameter Values
4.10.4 Symbols
4.10.3 Code Bytes
4.10.2 Source Annotation
4.10.16 Just-in-Time Debugging
4.10.17 OLE RPC Debugging
4.10.15 View Floating Point Registers
4.10.18 Debug Commands Invoke Edit and Continue
4.10.12 Show Data Bytes
4.10.14 Display Unicode Strings
4.10.13 Fixed Width
4.10.11 Re-evaluate Expression
4.11键盘映射
4.12 Debugger快捷键
4.13小结
第5章 调试版本与发行版本
5.2为调试版本建立修改工程设置
5.1缺省的调试版本建立与发行版本建立设置
5.2.1修改调试选项
5.2.2修改产生调试信息的格式
5.2.3产生一个映射文件
5.2.4重定向调试输入和输出
5.3什么是.pdb文件?
5.4什么是.dbg文件
5.5调试优化的代码
5.6打开Debugger的另一种方法
5.7使用基本版或调试版本
5.8 C/C++运行调试库
5.8.1旧版iostream.h和新版iostream之间的混乱
5.9连接器参考资料
5.10在调试版本中检测发行版本错误
5.10.1局部变量的自动初始化
5.10.2检查函数指针调用堆栈的合法性
5.10.3 检查调用堆栈的合法性
5.11 TRACE宏
5.12 VERIFT宏
5.13 移植Visual C++旧的32位版本
5.13.2与Visual C++以前的版本共存
5.13.1转换早期的32位工作空间和工程
5.14小结
第二部分 面向过程的环境
第6章 定位、分析和修复命令行代码错误
6.1快速启动调试
6.1.1启动Debugger的快速方法
6.1.2变量初始化跟踪
6.1.3小心调试代码
6.1.4快速查看变量的内容
6.1.6执行到代码的指定行
6.1.5中途停止Debugger
6.1.7全速执行到一个断点
6.1.8运行至光标处
6.1.9现在测试
6.2高级Debugger技巧
6.2.1使用新值运行
6.2.2循环调试技巧
6.2.3调用调试函数
6.2.4递归调用与调用堆栈
6.2.5查看反汇编代码
6.3进一步观察变量
6.3.1使用QuickWatch窗口
6.3.2使用Watch窗口
6.4小结
第7章 调试内联汇编语言代码
7.1汇编语言初步
7.1.1数据类型
7.1.2寄存器
7.1.3寻址模式
7.1.5协处理器
7.1.4指针
7.2调试
7.2.1减法运算
7.2.2使用256位整数
7.2.3程序循环
7.2.4使用协处理器求和实数
7.2.5使用协处理器计算正切值
7.3小结
第8章 在Windows 代码中定位、分析和修复错误
8.1使用两台计算机调试
8.1.1准备远程目标计算机
8.1.2准备主计算机
8.1.3启动调试会话
8.2简明Windows 入门
8.2.1基本的Windows 代码
8.2.2调试文件详述
8.2.3程序执行的情况
8.3调试
8.3.1一个动画位图程序
8.3.2使用鼠标绘画
8.4小结
第9章 定位、分析和修复命令行中的错误
第三部分 面向对象过程的环境
9.1高级调试工具
9.1.1内存卸出
9.1.2定位错误参数从何处传递而来
9.1.3查找何处修改了指针
9.2 ClassView窗口要素
9.2.1 ClassView窗口的Grouped by Access功能
9.2.2 ClassView窗口的Base Classes功能
9.2.4 ClassView窗口的 Derived Classes功能
9.2.3 ClassView窗口的References功能
9.2.5 ClassView窗口中菜单的其余项
9.2.6 ClassView窗口的Properities功能
9.2.7在ClassView窗口中添加文件夹
9.2.8在文件夹之间移动类
9.2.9隐藏或显示ClassView窗口
9.3调试argc和argv[]
9.4小结
第10章 使用MFC类库开发Windows 程序
10.1为什么使用类库
10.2一个真正的基础类——CObect
10.4一个图形程序
10.3什么是应用程序向导和类向导
10.4.1使用AppWizard
10.4.2使用ClassWizard
10.4.3建立AppWizard代码
10.4.4 AppWizard模板代码
10.4.5在客户区的图形对象
10.5剖面法
10.6小结
第11章 定位、分析和修复MFC Windows 代码中的错误
11.1内存问题
11.1.1有问题的代码
11.1.2定位和分析
11.1.3修复工程
11.2绘图问题
11.2.1有问题的代码
11.2.2定位和分析
11.2.3修改工程
11.3小结
第四部分 标准模板库(STL)
第12章 STL编程实践
12.1多体系结构
12.2掌握C++
12.5 STL和HP公司
12.4初识STL
12.3 STL——进退维谷的数据结构
12.6大众化的STL
12.7 STL总览
12.8 ANSI/ISO C++接受STL的过程
12.9 STL基本组件
12.9.1什么是容器?
12.9.2什么是适配器?
12.9.3什么是算法?
12.9.4什么是迭代器?
12.10完整的STL程序包
12.9.5其他的STL组件
12.11杂乱的C/C++家族
12.12回顾数据结构
12.12.1静态与动态
12.12.2类型指针
12.12.3 void指针
12.13复习匈牙利命名法
12.14函数重载
12.15函数指针
12.16.1运算符和函数调用的重载
12.16运算符重载
12.16.2编写自己的重载运算符
12.17从结构到模板
12.17.1 template关键字
12.17.2模板语法
12.17.3模板函数
12.17.4模板类
12.18为什么STL比模板好
12.19小结
第13章 定位、分析和修复STL代码中的错误
13.1.1用迭代器遍历容器
13.1从标准C++转同STL语法的过程中出现的问题
13.1.2仔细研究迭代器
13.1.3流迭代器
13.1.4为什么使用end()
13.1.5复制列表
13.1.6列表中的列表
13.1.7 STL字符串指针的麻烦
13.1.8释放STL指针
13.2一个C++程序转变为STL语法的例子
13.2.1第一步——更新aSingleCard类
13.2.2第二步——更新WarDeck类
13.2.3第三步——修复STL代码的执行错误
13.2.4第四步——更新Opponent类
13.2.5第五步——运转的STL程序
13.3 STL语法的源文件wargame.cpp
13.4小结
第五部分 特殊的调试问题
第14章 使用DLL工作
14.1创建一个基于MFC的动态链接库
14.1.1头文件Framer.h
14.1.2源代码文件Framer.cpp
14.1.3建立Framer.dll
14.2创建使用DLL的主应用程序
14.2.1头文件DLLDemoView.h
14.2.2源代码文件DLLDemoView.cpp
14.3更加仔细地查看
14.3.1远程调试
14.3.2有问题的代码
14.3.3改正后的代码
14.4小结
第15章 使用ActiveX控件工作
15.1开发一个ActiveX控件
15.1.1使用ControlWizard
15.1.2 Test Container
15.1.3产生一个真实的Clock控件
15.2调试Clock控件
15.2.1准备远程目标计算机
15.2.2准备主计算机
15.2.3开始调试过程
15.2.4查找问题
15.3小结
第16章 调试COM、ATL和DHTML
16.1 COM对象模型
16.2创建一个ATL多边形工程
16.2.1优化模块代码
16.2.2测试控件
16.3调试ATL COM控件
16.4小结
第17章 STL和MFC编程
17.1产生一个STL和MFC应用程序
17.1.1复数
17.1.2模板语法
17.1.3基本的应用程序代码
17.2调试
17.3小结