C语言小括号缩进规则是小括号!

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

作者:薛定谔的coding猫

今天给大家带来一个比较典型的问题一个小括号引发的bug,问题虽小但值得注意

在上面这段代码中,作者的本意是处理两種情况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已经被括号封装起来了

一个小小的括号就会完全改变程序的执行流程,从这个例子中我们可以看出不要随意省略括号是良好的编程习惯,请大家以后注意感谢耐心阅读!



· TA获得超过3万个赞

c语言支持定义┅系列相同连续的变量空间其定义形式为

代表定义个数为n,每个元素类型均为type型的数组变量name。

a[100]就是定义一个元素个数为100个的整型数组a

对於a中元素的调用同样是通过中括号对来实现的,当调用a[n]时代表第n个元素。

需要注意的是在c中规定,数组元素的下标n是从0开始计数的所以对于定义的a[100],

其合法的元素为a[0],

你对这个回答的评价是?


· TA获得超过3万个赞

问:如果输出语句在括号里面呢?

答:按括号里面的输出

问:括号里面的函数只能在括号的范围内作用吗?

问:如果执行完后那括号里的那些值还在不?

答:失效了。在括号里面定义的变量其作用域就呮限于括号里面。

我这有个简单的程序你跑一下就知道了。

你对这个回答的评价是

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜體验。你的手机镜头里或许有别人想知道的答案

我要回帖

 

随机推荐