第十二章 基本数据类型
数值概论
下面一些建议能够使你在使用数的时候少犯错误。
- 避免使用神秘数值
- 修改会变得更可靠;
- 修改会变得更容易;
- 你的代码变得更可读。
- 如果需要可以使用硬编码的0和1;
- 预防除零错误;
- 使类型转换变得明显;
- 避免混合类型的比较;
- 注意编译器的警告。
整数
在用整数的时候,要注意下面的注意事项。
- 检查整数除法;
- 检查整数溢出;
- 检查中间结果溢出。
浮点数
使用浮点数应遵循的原则:
- 避免数量级相差巨大的数之间的加减运算;
- 避免等量判断;
- 处理舍入问题:
- 换用一种精度更高的变量类型;
- 换用二进制编码的十进制变量;
- 把浮点变量变成整数变量;
- 检查语言和函数库对特定数据类型的支持。
字符和字符串
使用字符串的技巧:
- 避免使用神秘字符和神秘字符串;
- 避免off-by-one错误;
- 了解你的语言和开发环境是如何支持Unicode的;
- 在程序生命周期中尽早决定国际化/本地化策略;
- 如果你知道只需要支持一种文字的语言,请考虑使用ISO 8859字符集;
- 如果你需要支持多种语言,请使用Unicode;
- 采用某种一致的字符串类型转换策略。
C语言中的字符串
直接处理C字符串避免常见错误的方法。
- 注意字符串指针和字符串数组之间的差异:
- 警惕任何包含字符串和等号的表达式;
- 通过命名规则区分变量是字符串数组还是字符串指针。
- 把C-style字符串的长度声明为CONSTANT + 1;
- 用null初始化子串串以避免没有终端的字符串;
- 用字符数组取代C中的指针;
- 用strncpy()取代strcpy()以避免无终端的字符串。
布尔变量
- 用布尔变量对程序加以文档说明;
- 用布尔变量来简化复杂的判断;
- 如果需要的话,创建你自己的布尔类型。
枚举类型
- 用枚举类型来提高可读性;
- 用枚举类型来提高可靠性;
- 用枚举类型来简化修改;
- 将枚举类型作为布尔变量的替代方案;
- 检查非法数值;
- 定义出枚举的第一项和最后一项,以便用于循环边界;
- 把枚举类型的第一个元素留作非法值;
- 明确定义项目代码编写标准中的第一个和最后一个元素的使用规则,并且在使用时保持一致;
- 警惕给枚举元素明确赋值而带来的失误;
具名常量
具名常量很像变量,一旦赋值以后就不能再修改了。
- 在数组声明中使用具名常量;
- 避免使用文字量,即使是安全的;
- 用具有适当作用域变量或者类来模拟具名常量;
- 统一地使用具名常量。
数组
数组是最简单和最常用的结构化数据类型。
- 确认所有的数组下标都没有超出数组边界;
- 考虑用容器来取代数组,或者将数组作为顺序化结构来处理;
- 检查数组的边界点;
- 如果数组是多维的,确认下标的使用顺序是正确的;
- 提防下标串话;
- 在C中结合ARRY_LENGTH()宏来使用数组。
核对表:基本数据类型
数值概论
整数
浮点数
字符和字符串
布尔变量
枚举类型
具名常量
数组
创建类型
要点
- 使用特定的数据类型就意味着要记住适用于各个类型的很多独立原则;
- 如果你的语言支持,创建自定义类型会使得你的程序更容易修改,并更具有描述性;
- 当你用typedef或者其等价方式创建了一个简单类型的时候,考虑是否更应该创建一个新的类。