这里是IT萌新Miaotty~致力于帮助像我一样的小白们尽快入门,毙掉或者避掉那些只有小白才懂的坑......
今天浅讲一下关于代码风格问题,这个常常导致小白们陷入有bug却如何也找不到的困境!
前期一定要注意习惯的培养,对于面试等场合也可以给面试官留下好印象~
咱们从最典型的讲起
一、分支语句中的悬空else
你可能会问,什么叫悬空else?我们不着急下定义,可以先从一个错误实例看起~
看到这个程序,大家可以想一想这个输出结果会是什么呢?思考一下再看结果哦~
结果是什么也不输出!
大家为什么会产生其他错误答案呢?
本质上是将else的匹配对象搞混了。
这里的程序给大家挖了个坑,因为故意将else将第一个if对齐,让大家自然而然的觉得这个else的匹配对象就是那个if,但是其实else的匹配对象是距离他最近的if!
这个问题的产生本质上就是不良好的代码书写习惯造成的,下面展示来两种较为舒适且较为不容易出错的形式供大家借鉴~
以上就是悬空else问题。
(推荐使用大括号,形成对应的代码块就清晰啦~)
二、if语句中的大小坑
1.判断中的小坑
先看一个if语句
if(8<=x<18)
大家觉得这个语句有没有问题呢?
是的,聪明的你应该察觉到了,这个如果x比8大压根就是恒成立!
为什么呢?
我们来分析一下这个代码语句运行逻辑:(x>8的前提下)
先判断前半句:8<=x 显然成立。
OK问题就出在下一步了,下一步运行并不是再拿x和18进行比较滴,因为前半句已经判断为真,所以,下一步就成了“1”与18进行比较(补充知识:计算机识别时1为真,0为假,此刻判断前半句为真,故当做1处理),所以后半句必然成立!
这个也是书写不规范造成的,正确形式可以采取如下形式:
if(x>=8 & x<18)
这样就清楚明 了了吧~(&在这里是数学里“且”的意思)
2.细节决定成败
上eg:
if(a=5)
这个错误我单独摆出来,大家应该一眼都能看出来。if里面应当是判断语句双等号(==)
但是这个错误厉害就厉害在这条if语句没有任何语法错误,也就是说编译器识别不出来!
试想如果我们写了一大堆代码,最后发现运行失败但是没有报错,你绝不绝望?
绝望死了。。。
这个问题也是书写习惯的问题,我们可以换一种书写方法可以完全避免这个错误!
if(5==a)
哎,你看这样写妙在哪里,他妙就妙在如果写反5=a这个是有语法错误的!一经写错,编译器自动识别出来!这样就完美的避免了这个可能引起大问题的错误!
OK,今天关于代码风格的问题就到这里啦~这次的内容有借鉴一本非常棒的书《高质量的C/C++编程》,这本书有一个章节很详细的写了这方面的问题,绝对意义上的好书!如果大家有需要就在本篇文章下留言叭,我看到会无偿分享电子版给大家的!