标签:als 异常情况 比较 定义 eps 布尔值 产生 意义 深度剖析
if、else看起来很简单,也是我们最开始入门时就学习的逻辑结构,但在看了C语言深度剖析后,有了新的理解。下面记录一下几个简单的问题。
1.bool变量与“零值“进行比较
bool bTestFlag = FALSE;
//写法A
if(bTestFlag == 0);
if(bTestDlag == 1);
//写法B
if(bTestFlaf == TRUE);
if(bTestFlag == FALSE);
//写法C
if(bTestFlag);
if(!bTestFlag);
以上那种是正确的写法呢?首先看写法A,写法A很容易误认为bTestFlag是整型变量,所以这种写法不好。再看看写法B,FALSE的值大家都知道(在编译器的被定义为0),但是要注意TRUE的值可不都是1,例如Visual Basic就把TRUE定义为-1,所以这种写法也不好。最后看看写法C,if语句是靠其后面括号里的表达式的值来进行分支跳转,如果表达式为真则执行紧跟if语句后的代码;否则不执行。所以写法C很好,不会引起误会,也不会由于TRUE或FALSE的不同定义值而出错。所以以后写代码是得注意,按C方法写比较好。
2.float变量与”零值“进行比较
float fTestVal = 0.0;
//写法A
if(fTestVal == 0.0); if(fTestVal != 0.0);
//写法B
if((fTestVal>=-EPSINON)&&(fTestVal<=EPSINON));
EPSINON为定义好的精度
以上写法是否正确呢?我们知道float和double都是有精度限制的,直接拿来与0.0比肯定不正确。EPSINON为定义好的精度,如果一个数落在[0.0-EPSINON ,0.0+EPSINON]这个闭区间内,我们就认为在某个精度内它的值与零值相等。
3.指针变量与”零值“进行比较
int * p = NULL;
(A) if(p == 0);
(B) if(p);
(C)if(NULL == p);
以上写法那些是正确的呢?分析如下:
在写法A中,很容易误认为p是整型变量,引起误会,尽管NULL的值和0一样,但意义不同,所以这个写法不好。
在写法B中,容易误认为p是bool型变量,不好。
最后的写法C是正确的。
4.一些使用if语句需要注意的事项
标签:als 异常情况 比较 定义 eps 布尔值 产生 意义 深度剖析
原文地址:https://www.cnblogs.com/taoye1997/p/11884578.html