今天读了<<Windows 程序调试>>编写便于调试的C++代码这一章内容,觉得收获较大,对本人在编程风格和编程习惯上有指导意义.笔记如下:
一.设计:
重要的特性是简单性和耦合性, 大多数常见的设计错误来源于程序设计不必要的复杂成分,因此尽量使程序简单合理.耦合性用来衡量不同对象之间的依赖程度,因此程序中能独立的对象要尽量独立出来.
二.C++编程风格
1.清晰地书写代码,最直接的说出你的意思;
2.结构良好的代码具有更加有用的调用栈(call stack),它能给你更多的信息;
3.使用良好的标识名字;
4.重新考虑匈牙利命名法,尽管这种命名法过去很有用,随着时代改变,匈牙利命名法书写的程序难以阅读,难以维护,容易被人误解;(疑问:现在大部分程序员都还是用这种命名法,有没有更好更合理的方法呢?书中也没有介绍,可能关键还是个人习惯问题吧)
5.用简单的语句行;
6.使用统一的排列,用空格键代替tab键;
7.用括号使书写更清晰,如果你不能确定是否需要用括号,你就需要用括号.这样可使优先级的问题一目了然;
8.为了将来的维护,书写注释.
三.C++语言
1.选择C++语言而不是C预处理,但是要理解调试代码的时候需要使用预处理器;
2.要在头文件中声明所有共享的外部符号,而且保留函数原型中的参数名;
3.记得在构造函数里面初始化数据成员,
4.对于不熟悉的位掩码要检查位掩码值,必要的时候,使用掩码宏或者子域掩码;
5.布尔表达式应当检查是否为假而不是检查是否为真;
如:if(boolleanValue == TRUE)....;是不合理的,应当改写为if (boolleanValue != FALSE)....;或if (boolleanValue )....;
6.应当防止使用整型,字符型和浮点变量出现减一错误,除零,溢出错误.
7.在使用指针和句柄时,当回收指针所指的对象的时候要重新初始化这个指针,并且要在指针被释放之前为空时就对其进行处理;
8.不要匆忙使用强制类型转换,因强制类型转换会在维护时引发问题,如果你在Visual C++中使用dynamic_cast,记住要在Project设置里面选择Enable Run_time Type Information选项;
9.在程序中仔细地使用const是一种好方法,能帮助编译器在编译时发现错误,但引入const时如果不是一开始就用的话,添加起来就会很麻烦.使用const 是一个不动则已,一动就动全身的问题;
10.如果循环变量的增加操作在每次循环的时候都必须执行的话,那么就使用for语句而不是while语句;
四.Visual C++编译器
1.尽量采用编译时刻检查而不是运行时刻检查,使用W4警告级别是个好办法;
2.在调试版本里总是使用GZ编译选项;
3."没有警告的编译"法则对于大的程序开发小组来说很有帮助,但是前提是允许出现异常,最终目标是消除错误,而不是消除警告.