bool, int, float与零的比较

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

相关文章

Css3如何实现鼠标移上变长特效?(图文+视频)
css3怎么实现鼠标悬停图片时缓慢变大效果?(图文+视频)
jquery如何实现点击网页回到顶部效果?(图文+视频)
css3边框阴影效果怎么做?(图文+视频)
css怎么实现圆角边框和圆形效果?(图文+视频教程)
Css3如何实现旋转移动动画特效