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;
修改一处即可