Code Complete读书笔记02

Chapter12

3、对浮点数不可直接比较大小,而应用两者之差<某个特定值的方式

         例:double sum=0.0,test=1.0

         for(i=0;i<10;i++)       sum+=0.1;

         if(sum==test)//很有可能不相等,sum最终值为0.999999997

        

         ∴自定义函数equals

         bool Equals(double s1,double s2)

{

         if(fabs(s1,s2)<0.000001)          return true;

         return false;

}则可直接比较

4、避免使用神秘字符与神秘字符串,用具名常量来加以取代

5、C语言字符串   将长度声明为constant+1

         例: char name[NAMELENGTH+1]={0};

         for(i=0;i<NAMELENGTH;i++)

                   name[i]=…                 //处理

         strncpy(name,some_other_name,NAMELENGTH);        //使用函数

         1)C风格字符串最后一位为’\0’(空结束符) ∴多出一位

         2)C通过字符串末尾取值为0的字节来判断字符串末尾        ∴若忘记最后一位放空值,会bug

         solution:1,声明字符数组的时候把它初始化为0←→NULL(如上)

2,动态分配字符串,用calloc而不非malloc(calloc会有初始化,malloc只分配内存,无初始化)

     3)用strncpy()而非strcpy()

     strcpy(),strcmp()等都属于危险的库函数(直到空结束符,否则一直运行下去)

     strncpy(),strncmp()会接受一个最大长度的参数(如上)

6、用布尔变量简化复杂的判断

     例,if( (begin==end) || (end-begin>size) )

     转换为 bool stackEmpty=(begin==end)

                 bool stackFull=(end-begin>size)

                        if(stackEmpty ||stackFull)        //可读性大大增强

7、每当看到字面形式数字的时候考虑枚举

8、创建ARRAY_LENGTH宏或者内联

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

     例:int MulArray[]={………}

              for(int index=0;index<ARRAY_LENGTH( MulArray) ;index++)

                        ……

9、创建自定义数据类型

     例:经纬度表示 typedef float Coordinate;

     Coordinate latitude;

     Coordinate longtitute;//经纬

     当需要提升精度时,只需要修改typedef double Coordinate;

     修改一处即可

原文地址:https://www.cnblogs.com/yangtianxing/p/2479820.html