C语言中一个括号引发的百变程序!千万要注意哦!
今天要给大家带来一个比较常见的错误,这个问题属于比较典型的问题,即使是多年经验的C程序员也可能会犯这个错误。
首先来看如下代码:
在上面这段代码中,作者的本意是处理两种情况x等于0以及x不等于0,对于x等于0的情况,如果y也等于0,就调用error()函数。如果x不等于0,首先求出x和y的和,然后赋值给z。
然而,上面这段代码实际上所做的却和编程者的意图相去甚远。
原因在于c语言中有这样的规则,else始终优先匹配同一对括号中最近未匹配的if。如果我们按照程序实际执行的逻辑来调整代码的缩进,那么代码实现的功能大致如下:
观察上面的代码可以发现,如果x不等于0,程序不会进行任何处理。如果程序等于0,会进一步根据y的值是否为0进行处理。
如果我们想得到原来的例子中由代码缩进体现的编程者的本意,我们应该这样写这个函数。
现在else与第一个if正确匹配,即使它距离第二个if更近也是如此,因为此时第二个if已经被括号封装起来了。
一个小小的括号就会完全改变程序的执行流程~
从这个例子中我们可以看出,不要随意省略括号是良好的编程习惯,请大家以后注意。
对于热爱编程的小伙伴来说,一个好的学习环境和学习氛围是事半功倍的!如果你感兴趣或者有需求的话,笔者这里有一个编程入门学习交流俱乐部,想进来学习的可以私我或者在下方评论【编程学习】,还有完整的学习路线图和学习文件视频,欢迎想学编程的小伙伴们!