1 谨慎使用全局(公共)变量(1)去掉没必要的公共变量。公共变量是增大模块间耦合的原因之一,故应减少没必要的公共变量以降低模块间的耦合度。
(2)仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。在对变量声明的同时,应对其含义、作用及取值范围进行注释说明,同时若有必要还应说明与其它变量的关系。
(3)防止局部变量与公共变量同名——通过使用较好的命名规则来消除此问题。
2 数据类型间的转换(1)编程时,要注意数据类型的强制转换。当进行数据类型强制转换时,其数据的意义、转换后的取值等都有可能发生变化,而这些细节若考虑不周,就很有可能留下隐患。
(2)对编译系统默认的数据类型转换,也要有充分的认识。
示例:如下赋值,多数编译器不产生告警,但值的含义还是稍有变化。
char chr;
unsigned short int exam;
chr = -1;
exam = chr; // 编译器不产生告警,此时exam为0xFFFF。
(3)尽量减少没有必要的数据类型默认转换与强制转换。例如,所有的 unsigned类型都应该有后缀“U”以明确其类型。
(4)合理地设计数据并使用自定义数据类型,避免数据间进行不必要的类型转换。
(5)对自定义数据类型进行恰当命名,使它成为自描述性的,以提高代码可读性。注意其命名方式在同一产品中的统一,并且保证没有多重定义。使用自定义类型,可以弥补编程语言提供类型少、信息量不足的缺点,并能使程序清晰、简洁。
示例:可参考如下方式声明自定义数据类型。下面的声明可使数据类型的使用简洁、明了。
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int DWORD;
下面的声明可使数据类型具有更丰富的含义。
typedef float DISTANCE;
typedef float SCORE;
(6)不要用八进制数——整型常数以”0“开始会被认为是8进制。示例:
code[1]=109
code[2]=100
code[3]=052
code[4]=071
如果是对总线消息初始化,会有危险。
|