关于特殊变量与零值作比较,查了下书,整理了一下,很有用。
1,bool 变量与“零值”进行比较
bool变量与“零值”进行比较的if语句怎么写?
bool flag = FALSE;
A), if(flag == 0); if(fFlag == 1);
B), if(flag == TRUE); if(flag == FLASE);
C), if(flag); if(!flag);
哪一组或是那些组正确呢?
A)容易让人误会成整型变量
B)FLASE的值在编译器里被定义为0;但TRUE的值呢?都是1吗?很不幸,不都是1。Visual C++定义为1,而它的同胞兄弟Visual Basic就把TRUE定义为-1.那很显然,这种写法也不好。
C)if语句靠其后面的括号里的表达式的值来进行分支跳转的。表达式如果为真,则执行if语句后面紧跟的代码;否则不执行。那显然,本组的写法很好,既不会引起误会,也不会由于TRUE或FLASE的不同定义值而出错。
2, float 变量与“零值”进行比较
float变量与“零值”进行比较的if语句怎么写?
float Val = 0.0;
A), if(Val == 0.0); if(Val != 0.0);
B), if((Val >= -EPSINON) && (Val <= EPSINON));
A)float和double类型的数据都是有精度限制的,不能直接拿来和0.0做比较。
B)EPSINON为定义好的精度,如果一个数落在[0.0-EPSINON,0.0+EPSINON] 这个闭区间内,我们认为在某个精度内它的值与零值相等;否则不相等。把0.0替换为想比较的任何一个浮点数,那就可以比较任意两个浮点数的大小了,当然是在某个精度内。
同样的也不要在很大的浮点数和很小的浮点数之间进行运算,比如:
10000000000.00 + 0.00000000001
这样计算后的结果可能会让人大吃一惊。
3,指针变量与“零值”进行比较
指针变量与“零值”进行比较的if语句怎么写?
int*p=NULL;
A), if(p == 0); if(p != 0);
B), if(p); if(!p);
C) , if(NULL == p); if(NULL != p);
A)p是整型变量?容易引起误会。尽管NULL的值和0一样,但意义不同。
B)p是bool型变量?容易引起误会。
C)写法:这个写法是正确的,但样子比较古怪。为什么要这么写呢?是怕漏写一个“=”号:if(p = NULL),这个表达式编译器当然会认为是正确的,但却不是你要表达的意思。所以,非常推荐这种写法。 |