bool, int, float与零的比较

时间:2021-09-30 13:33:57

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比较智能,可能会报错).