网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
资料首页最新产品 技术参数 电路图 设计应用 解决方案 代理商查询 IC替换 IC厂商 电子辞典
关键字: 技术文章 PDF资料 IC价格 电路图 代理商查询 IC替换 IC厂商 电子辞典

C语言中一个括号引发的……

C语言中一个括号引发的……
作者:薛定谔的coding猫
今天给大家带来一个比较典型的问题,一个小括号引发的bug,问题虽小但值得注意。
首先来看如下代码
·
·
if (x == 0)  if (y == 0)    error();else{  z = x + y;}
在上面这段代码中,作者的本意是处理两种情况x等于0以及x不等于0,对于x等于0的情况,如果y也等于0,就调用error()函数。如果x不等于0,首先求出x和y的和,然后赋值给z。
然而,上面这段代码实际上所做的却和编程者的意图相去甚远。
原因在于C语言中有这样的规则:else始终优先匹配同一对括号中最近未匹配的if。如果我们按照程序实际执行的逻辑来调整代码的缩进,那么代码实现的功能大致如下:
·
·
if (x == 0) {  if (y == 0)     error();  else {    z = x + y;  }}
观察上面的代码可以发现,如果x不等于0,程序不会进行任何处理。如果程序等于0,会进一步根据y的值是否为0进行处理。
如果我们想得到原来的例子中由代码缩进体现的编程者的本意,我们应该这样写这个函数。
·
·
if (x == 0) {  if (y == 0)     error();} else {  z = x + y;}
现在else与第一个if正确匹配,即使它距离第二个if更近也是如此,因为此时第二个if已经被括号封装起来了。
一个小小的括号就会完全改变程序的执行流程,从这个例子中我们可以看出,不要随意省略括号是良好的编程习惯,请大家以后注意,感谢耐心阅读!

热门搜索:TLP604 2920120 SPS-615-HG PS-410-HGOEMCC PS-415-HGULTRA 2838322 2838228 TLM615SA UL24CB-15 IS-1000 TLP404 PS361220 TLP6B 1553DBPCB SS240806 PS120406 2320306 TLP825 TLM626SA PS-415-HG BSV52R TLP606B 6SPDX-15 SBB1002-1 PM6SN1
COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
客户服务:service@IC72.com 库存上载:IC72@IC72.com
(北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质