核对表:基本数据类型CHECKLIST:Fundmental Data
数值概论
- 代码中避免使用神秘数值吗?
- 代码考虑了除零错误吗?
- 类型转换很明显吗?
- 如果在一条语句中存在两个不同类型的变量,那么这条语句会像你期望的那样求值吗?
- 代码避免了混合类型比较吗?
- 程序编译时没有警告信息吗?
整数
- 使用整数除法的表达式能按预期的那样工作吗?
- 整数表达式避免整数溢出问题吗?
浮点数
- 代码避免了对数量级和差巨大的数字做加减运算吗?
- 代码系统地阻止了舍入错误的发生吗?
- 代码避免对浮点数做等量比较吗?
字符和字符串
- 代码避免使用神秘字符和神秘字符串吗?
- 使用字符串时避免了off-by-one错误吗?
- C代码把字符串指针和字符数组区别对待了吗?
- C代码遵循了把字符串声明为CONSTANT + 1 长度的规则了吗?(CONSTANT 为 typedef 定义的数组长度)
- C代码在我在适当的时候用字符数组代替指针了吗?
- C代码把字符串初始化为NULL来避免无终端的字符串了吗?
- C代码用strncpy()代替strcpy()吗?strncat()和strncmp()呢?
布尔变量
- 程序用额外的布尔变量来说明条件判断了吗?
- 程序用额外的布尔变量来简化条件判断了吗?
枚举类型
- 程序用枚举类型而非具名变量来提高可读性、可靠性和可修改性吗?
- 当变量的用法不能仅用true和false表示的时候,程序用枚举类型来取代布尔变量吗?
- 针对枚举灯型的测试检测了非法数值吗?
- 把枚举类型的第一项条目保留为“非法的”了吗?
具名常量
- 程序用具名常量而不是神秘数值来声明数据和表示循环界限吗?
- 具名常量的使用一致吗?——没有在有些位置使用具名常量又在其他位置使用文字量?
数组
- 所有的数组下标都没有超出数组边界吗?
- 数组引用没有出现off-by-one错误吗?
- 所有多维数组的下标的顺序都正确吗?
- 在嵌套循环里,把正确的变量用于数组下标来避免循环下标串话了吗?
创建类型
- 程序对每一种可能变化的数据分别采用不同的类型吗?
- 类型名是以该类型所表示的现实世界实体为导向,而不是以编程语言类型为导向的吗?
- 类型名的描述性足以强,可以帮助解释数据声明吗?
- 你避免重新定义预定义类型吗?
- 与简单地重定义一个类型相比,你考虑过创建一个新类吗?