关键字-分节6(if、else 组合,bool,float及指针)

if、else 组合

if 语句很简单吧。嗯,的确很简单。那我们就简单的看下面几个简单的问题:

bool 变量与“零值”进行比较
bool 变量与“零值”进行比较的if 语句怎么写?
bool bTestFlag = FALSE;//想想为什么一般初始化为FALSE 比较好? A), if(bTestFlag == 0); if(bTestFlag == 1);
B), if(bTestFlag == TRUE); if(bTestFlag == FLASE); C), if(bTestFlag); if(!bTestFlag);
哪一组或是那些组正确呢?我们来分析分析:
A)写法:bTestFlag 是什么?整型变量?如果要不是这个名字遵照了前面的命名规范, 肯怕很容易让人误会成整型变量。所以这种写法不好。
B)写法:FLASE 的值大家都知道,在编译器里被定义为0;但TRUE 的值呢?都是1
吗?很不幸,不都是1。Visual C++定义为1,而它的同胞兄弟Visual Basic 就把TRUE 定义 为-1.那很显然,这种写法也不好。
大家都知道if 语句是靠其后面的括号里的表达式的值来进行分支跳转的。表达式如果 为真,则执行if 语句后面紧跟的代码;否则不执行。那显然,本组的写法很好,既不会引 起误会,也不会由于TRUE 或FLASE 的不同定义值而出错。记住:以后写代码就得这样写。

float 变量与“零值”进行比较
float 变量与“零值”进行比较的if 语句怎么写? float fTestVal = 0.0;
A), if(fTestVal == 0.0); if(fTestVal != 0.0);
B), if((fTestVal >= -EPSINON) && (fTestVal <= EPSINON)); //EPSINON 为定义好的 精度。
哪一组或是那些组正确呢?我们来分析分析:
float 和double 类型的数据都是有精度限制的,这样直接拿来与0.0 比,能正确吗?明显 不能,看例子: 的值四舍五入精确到小数点后10位为:3.1415926536,你拿它减去 0.00000000001 然后再四舍五入得到的结果是多少?你能说前后两个值一样吗?
EPSINON 为定义好的精度,如果一个数落在[0.0-EPSINON,0.0+EPSINON] 这个闭区间内,我们认为在某个精度内它的值与零值相等;否则不相等。扩展一下,把0.0 替换为你想 比较的任何一个浮点数,那我们就可以比较任意两个浮点数的大小了,当然是在某个精度 内。
同样的也不要在很大的浮点数和很小的浮点数之间进行运算,比如: 10000000000.00 + 0.00000000001
这样计算后的结果可能会让你大吃一惊。

指针变量与“零值”进行比较
指针变量与“零值”进行比较的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),这个表达式编译器当然会认为是正确的,但却不是你要表达的意思。

使用if 语句的其他注意事项
【规则1-17】先处理正常情况,再处理异常情况。
在编写代码是,要使得正常情况的执行代码清晰,确认那些不常发生的异常情况处理 代码不会遮掩正常的执行路径。这样对于代码的可读性和性能都很重要。因为,if 语句总是
需要做判断,而正常情况一般比异常情况发生的概率更大(否则就应该把异常正常调过来 了),如果把执行概率更大的代码放到后面,也就意味着if 语句将进行多次无谓的比较。另
外,非常重要的一点是,把正常情况的处理放在if 后面,而不要放在else 后面。当然这也 符合把正常情况的处理放在前面的要求。 【规则1-18】确保if 和else 子句没有弄反。
这一点初学者也容易弄错,往往把本应该放在if 语句后面的代码和本应该放在else 语 句后面的代码弄反了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值