基本数据类型 (代码大全 第十一章)

来源:互联网 发布:无主之地2mac汉化 编辑:程序博客网 时间:2024/05/29 03:29

11.1 常数

避免" 奇异数"(magic numbers)。“奇异数”指的是出现在程序中间的不加解释的常数。


在需要时可以使用常数“0”或“1”


采取预防被"0" 除的措施


明显进行类型转换


避免混合类型比较


注意编译程序的警告


优秀的程序员总是力争消除所有的编译程序

警告信息。让编译程序去查错毕竟比自己干容易得多。



11.2 整型数

检查整型相除


检查整型是否溢出


检查中间结果是否溢出



11.3 浮点数

不要在数量级相差太大的数之间进行加减运算


避免相等比较


防止舍入误差




11.4 字符和字符串

避免“奇异字符和字符串”


警惕边界错误


11.4.1 C语言字符串


要清楚字符串指针和字符数组之间的区别


要注意任何含有字符串且又带有引号的表达式


使用命名约定来表示变量究竟是字符数组还是字符串指针


将字符串的长度说明为CONSTANT+1


把字符串初始化为“0”以避免无限长字符串


C中用字符数组来代替指针


strncpy() 代替strcpy()以避免无限长字将串


strcpy() strcmp()之类的子程序是很危险的,因为只有当遇到零结束符时它们才会停止。而strncpy()strncmp()相对来说,则要安全得多,因为它们把某一参数当作最大长度,因此即使某些字符率是无限长的,你的调用函数也不会持续不断地永远进行下去。 



11.5 逻辑变量

使用逻辑变量来说明程序


使用逻辑变量来简化复杂的判断


如果必要的话,建立自己的逻辑类型



11.6 枚举类型

使用枚举类型来提高可读性


使用枚举类型来提高可靠性


使用枚举类型来改善易修改性


用枚举类型来代替逻辑变量


检查无效值


把枚举类型的第一个入口保留为无效的



11.6.1 如果所用的语言不支持枚举类型

许多编译程序都把枚举类型中第一个元素的值赋为零。把被赋为 0值的那个元素说明为无效,可以帮助找出不恰当初始化的变量,因为当它们失效时更容易为0 



11.7 命名常量

在数据说明中使用命名常量


避免常数值


使用全局变量来模拟命名常量


一致地使用命名常量



11.8 数 组

确保所有的数组下标都没有越界


把数组当作顺序性结构 许多计算机科学家建议决不要随机地对数组进行存取。


检查数组边界


对于多维数组,要保证其下标的顺序是正确的


警惕下标的错误交叉


使数组的长度留有一定裕度


C 中,使用 ARRAY_LENGTH( )宏来处理数组




11.9 指 针

11.9.1 理解指针 

每个指针包括两部分:  内存存储单元及对这个存储单元中内容的解释。     


内存中的存储单元

内存中的存储单元就是地址,通常是用十六进制数来表示的。


怎样解释存储单元中的内容


解释存储单元中内容的基础是指针的基本类型。如果指针指向一个整数,它的真实含义 是编译程序把由指针提供的存储单元解释为一个整数。当然,可能会出现整数指针、字符串 指针和浮点数指针同时指向同一个存储单元的情况,而此时只有一个指针正确地解释了该 单元中的内容。


11.9.2 关于使用指针的几点建议

在使用指针之前对它进行检查

把指针操作独立在子程序中

在使用变量之前应先检查一下这一变量

使用标记字段来查找错误内存

使用显示冗余技术

释放指针后,把它设为 NULLNIL

使用额外的指针变量以增加清晰性。不管怎样,都不要吝于供给指针变量。

简化复杂的指针表达式

编写跟踪指针存储单元的子程序

按正确顺序释放链表中的指针

编写输出指针地址的子程序

在内存中划分出一段空间作为“降落伞”

使用非指针技术


11.9.3 C 中的指针

应使用显式指针类型而不是缺省类型

避免强制类型转换。

遵守参数传递的星号规则。

使用 sizeof()来确定内存存储单元中变量的规模。

使用 sizeof()不会影响性能,因为它的计算是在编译过程中进行的