0. 前言
编程不是单打独斗,而是团队合作.
遵循一定的规则, 可以从程序上提高效率,减少出错的概率, 并不是要我们遵循"标准答案".
活跃的思维和规范的编程风格并不冲突.
1. 定义bool型变量flag, 与零值进行比较:
可能的写法:
- if(flag == 0)
- if(flag == FALSE)
- if(flag)
在逻辑上, 上面三个都是正确的,而且都可以编译通过. 但是, 第一个会让人误以为flag是整型变量,因为这种写法flag可以与0在数值上进行比较,也可以与其他整型比较,明显暗示了flag是一个整型变量, 或者没法让别人一眼看出来flag是一个bool型变量.第二种写法, 既然有if(flag == FALSE), 那么不可避免会写if(flag == TRUE).TRUE的值是0, 但是FALSE的值呢?并不确定! VC++ 中TRUE的值1, VB中TRUE的值是-1.
正是因为TRUE的值不确定,所以任何比较都不建议与TRUE或者FLASE进行比较.
第三种,是推荐的广为认可的, 对bool型变量与零值进行比较的方法.
if(flag), if(!flag)
2. 浮点型变量flag与零值比较
可能很多人都知道, 浮点型变量与任何数比较的时候, 都不可以直接比较.
因为浮点数是一种不精确的储存方式.
但是规范的写法是怎样的呢?你不一定写对:
const float EPSINON = 0.00001;
if( (x >= -EPSINON ) && (x <= EPSIONO) )
比较之前首先要设置比较的精度值, 是一个常量;
使用EPSINON可以让你的同事很好地理解你的意图.
3. 指针与零值进行比较
这个大家应该都没问题:
if(NULL == flag)
别人一看就知道flag是指针变量, 而且NULL在前防止不小心少些一个=, 变成了赋值,
这样的话你可能检查不出来, 因为flag = NULL 总是为0, 编译不会报错(VS比较智能,可能会报错).