《代码大全》学习笔记之— 基本数据类型(2)

来源:互联网 发布:不认盘数据恢复 编辑:程序博客网 时间:2024/05/22 13:06

字符和字符串

        规则1:避免使用神秘字符和神秘字符串;

        此规则和上一条“代码中避免使用神秘数值”大同小异。

        神秘字符是指程序中随处可见的字面形式表示的字符(比如:’A’);

        神秘字符串是指字面形式表示的字符串(比如:”str”);

        解决办法:具名常量或者全局变量

        规则2:使用字符串时避免off-by-one(偏差一)错误;

              Off-by-one错误参考别人的博客:

       http://blog.csdn.net/gzliu_hit/article/details/7541022

        规则3:区分字符指针和字符数组;

从以下两个方面来看字符指针和字符数组的差异:

警惕任何包含字符串和等号的表达式,等号几乎意味着某种指针错误。在C语言中,字符串的操作基本都是通过strcmp( ),strcpy(),strlen(),strcat()及其他相关子程序来完成的。

通过命名规则区分变量是字符数组还是字符串指针。字符数组加前缀ach,字符指针加前缀ps。

       规则4:遵循把字符串长度申明为STRLEN + 1的规则;

               程序中使用统一的规则,便于维护和理解

       规则5:适当时候,用字符数组代替字符指针;

       如果内存不受限,那么就把所有的字符串变量都声明为字符数组。这样有助于避免指针错误,即使出错,编译器也会给更多警告。

       规则6:字符串初始化为NULL;

       字符串的结尾字符必须是 ’\0’,字符串初始化为NULL,可以避免无结束符的字符串。两种实现方法:

声明字符数组的时候把它初始化为0;

在动态分配字符串的时候,使用calloc( )而不是malloc( )来把它初始化为0。calloc( )负责分配内存,并把它初始化为0;malloc( )只分配内存,并不执行初始化,小心使用malloc( )!

       规则7strncpy( )代替strcpy( )strncat( )代替strcat( )strncmp( )代替 strcmp( )

       strncpy()strncat( )strncmp( )等函数,会接受一个表示最大长度的参数,因此一旦处理到此参数长度位置,即使字符串还没有结束,函数调用也会及时返回。

布尔变量

      规则1用额外的布尔变量说明条件判断;

       将条件判断表达式用一个布尔变量来表示,这样程序看起来会更清晰。

       规则2用额外的布尔变量简化条件判断;

       规则3如果需要,创建自己的布尔变量。

       有些语言,比如C,没有布尔变量,可以用typedef intBOOLEAN自定义之。

枚举类型

       规则1:用枚举类型而非具名常量来提高可读性、可靠性、可修改性;

       比如:星期几,颜色之类的,用枚举类型的变量来表示,程序就会很清晰明了。

       规则2:当变量的用法不能仅用truefalse表示时,有枚举类型取代布尔变量;

       规则3:针对枚举类型的测试检测非法数值;

比如:结合switch{ case: case: }来使用就可以很方便地而检查非法数值;

       规则4:把枚举类型的第一条保留为“非法的”;

很多编译器会把枚举类型的第一个元素赋值为0,把映射到0的那个元素声明为无效会有助于捕捉那些没有合理初始化的变量。

规则5:警惕给枚举元素明确赋值而带来的失误;

具名常量

       规则1:用具名常量而不是神秘数值来声明数据和表示循环界限

       规则2:具名常量的使用保持一致

同一个实体只使用一个具名常量,否则是自找麻烦。

数组

       规则1:确保所有的数组下标都没有超出数组边界;

       规则2:确保数组引用没有出现off-by-one错误;

       规则3:确保多维数组的下标的顺序正确;

       规则4:在嵌套循环里,把正确的变量用于数组下标来避免循环下标串话。

 

原创粉丝点击