发 帖  
原厂入驻New
[讨论] C语言中一个括号引发的……
2020-5-19 14:06:03  227 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已经被括号封装起来了。
一个小小的括号就会完全改变程序的执行流程,从这个例子中我们可以看出,不要随意省略括号是良好的编程习惯,请大家以后注意,感谢耐心阅读!

0
2020-5-19 14:06:03   评论 分享淘帖
1 个讨论
这个要看个人编程喜好,各有利弊,我跟你的看法是一致的,以上没有括号区分的编程风格本人不太喜欢,即使是很仔细的人有时也会犯错,程序面前,人人平等
2020-5-20 14:58:36 评论

举报

撰写讨论

你正在撰写讨论

如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
发讨论
关闭

站长推荐 上一条 /7 下一条

快速回复 返回顶部 返回列表