基本数据类型是构建其他所有数据类型的构造块。

1、数值概论

  • 避免使用神秘数值

    神秘数值是在程序中出现的、没有经过解释的数值文字量(litertal numbers),请用具名常量代替神秘数值,不支持具名常量时,用全局变量代替。

    避免使用神秘数值的好处:

    • 修改会变得更可靠
    • 修改会变得更容易
    • 你的代码变得更可读
  • 如果需要,可以使用硬编码的0和1

    0和1用于增量、减量和从数组的第一个元素开始循环

  • 预防除零(devide-by-zero)错误
  • 使类型转换变得明显
  • 避免混合类型的比较
  • 注意编译器的警告

2、整数

使用整数的注意事项:

  • 检查整数除法
  • 检查整数溢出
  • 检查中间结果溢出

3、浮点数

使用浮点数应该遵循的指导原则:

  • 避免数量级相差巨大的数之间的加减运算
  • 避免等量判断
  • 处理舍入误差问题

    • 换用一种精确度更高的变量类型
    • 换用二进制编码的十进制
    • 把浮点变量编程整型变量
  • 检查语言和函数库对特定数据类型的支持

4、字符和字符串

使用字符串的技巧:

  • 避免使用神秘字符和神秘字符串

    • 对于程序的名字、命令名称、报表标题等常常出现的字符串,你有时可能需要修改他们的内容
    • 国际市场的重要意义正在日益凸现,翻译存放在字符串资源文件中的字符串要比翻译存在于代码中的字符串容易得多
    • 字符串的字面表示形式通常都会占用较多的存储空间
    • 字符和字符串的字面表示形式的含义是模糊的
  • 避免off-by-one错误
  • 了解你的语言和开发环境是如何支持Unicode的
  • 在程序生命期中尽早决定国际化/本地化策略
  • 如果你指导只需要支持一种文字的语言,请考虑使用ISO 8859字符集
  • 如果你需要支持多种语言,请使用Unicode
  • 采用某种一致的字符串类型转换策略

使用c语言中的字符串,避免常见错误的方法:

  • 注意字符串指针和字符数组之间的差异

    • 警惕任何包含字符串和等号的表达式
    • 通过命名规则区分变量是字符数组还是字符串指针
  • 把C-style字符串的长度声明为CONSTANT+1
  • 用null初始化字符串以避免无结束符的字符串
  • 用字符数组取代C中的指针
  • 用strncpy() 取代strcpy()以避免无结束符的字符串

5、布尔变量

要把逻辑变量或者布尔变量用错是非常困难的,而更仔细地运用它会让你的程序变得更清晰

  • 用布尔变量对程序加以文档说明
  • 用布尔变量来简化复杂的判断
  • 如果需要的话,创建你自己的布尔类型,使得用途更为明显

6、枚举类型

枚举类型是一种允许用英语来描述某一类对象中每一个成员的数据类型。当你的语言里没有枚举类型时,可以用全局变量来模拟。

如何使用枚举类型的指导原则:

  • 用枚举类型来提高可读性
  • 用枚举类型来提高可靠性
  • 用枚举类型来简化修改
  • 将枚举类型作为布尔变量的替代方案
  • 检查非法数值
  • 定义出枚举的第一项和最后一项,以便用于循环边界
  • 把枚举类型的第一个元素留作非法值
  • 明确定义项目代码编写标准中第一个和最后一个元素的使用规则,并且在使用时保持一致
  • 警惕给枚举元素明确赋值而带来的失误

7、具名常量

具名常量一旦赋值以后就不能再修改了,允许你用一个名字而不是数值来表示固定的量,如使用MAXIMUM_EMPLOYEES而不是1000来表示员工人数的最大值。

使用具名常量把程序中可能变化的一个方面写成一个参数,当需要对其修改时,只需要修改一处,是一种将程序“参数化”的方法。

具名常量的使用:

  • 在数据声明中使用具名常量
  • 避免使用文字量,即使是“安全”的
  • 用具有适当作用域的变量或类来模拟具名常量
  • 统一的使用具名常量

8、数组

数组是最简单和最常用的结构化数据类型。一个数组中含有一组类型完全相同,并且可以用数组下表来直接访问的条目。

使用数组的建议:

  • 确认所有的数组下标都没有超出数组的边界
  • 考虑用容器来取代数组,或者将数组作为顺序化的结构来处理。
  • 检查数组的边界点
  • 如果数组是多维的,确认下标的使用顺序是否正确
  • 提防下表串话
  • 在C中结合ARRAY_LENGTH()宏

      # define ARRAY_LENGTH(x) (sizeof(x)/sizeof(x[0]))
    

9、创建你自己的类型(类型别名)

自定义的数据类型是语言所能赋予你的一种最强有力、罪有助于澄清你对程序的理解的功能之一。

自定义类型的好处:

  • 易于修改
  • 避免过多的信息分发
  • 增加可靠性
  • 弥补语言的不足

创建自定义类型的指导原则:

  • 给所创建的类型去功能导向的名字
  • 避免使用预定义类型
  • 不要重定义一个预定义的类型
  • 定义替代类型以便于移植
  • 考虑创建一个类而不是使用typedef

更多有关《代码大全 2》的读书笔记,请关注 :
http://tabalt.net/blog/code-complete-2-reading-notes/

本文链接:http://tabalt.net/blog/cc2-fundamental-data-type/,转载请注明。