打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于程序控制逻辑的讨论 - 笔记 - 肖舸 - CSDN学生大本营 - Powered b...

前段时间和大家讨论关于我为什么不用do{}while()的问题,有个网友提出了一些很真知灼见的问题,我也给以了回复,想了一下,写成博文吧,大家都看看。

嗯,一家之言哈,欢迎拍砖。

原文如下:

哈哈,楼主说写代码都有脑子昏的时候,脑子昏的时候可是什么都能写出来。而不是只是看错了while(0)和while(1)。
这个不是我们拒绝do...while的理由。

当然,每个人有每个人的代码风格和规范。比如肖老师的代码规范就是不让用do...while,有些人的代码规范是可以用,但不能用goto。这个都因人而异,所以一转拍死,未必就是好。

不过肖老师的团队的bug数那么少,还是说明肖老师是一个非常严谨的人,带团队也是很有特点的。这个值得我跟肖老师好好的学习下。

还是要问肖老师,如果不用do...while(0)代替goto,肖老师的做法是什么?用while(1){......}?

我的回答:

我的团队允许用goto啊。不过要规范用,简单说有几点:
1、有限次数循环,一律用for(i=0;i < n;i++),个别需要递减序的,需要报备,大家讨论通过才能用。这里有很多道理,i的取值0~n-1,符合C语言数组的下标规约,永远递增序,表示我们的遍历动作都是从前向后,这样,多个锁联动时,不容易出现“互挂锁”错误,格式统一,大家互相看代码不累,等等。
2、无限次数循环,永远while(1),这个1可以是我书里面的inline int GetNot0(void)函数,一来格式统一,二来,我如果要做加密,就在这个GetNot0里面做手脚,别人很不好破解。
3、goto不允许用来做循环,即goto永远不准向前跳,仅用于出错之后,向后跳,然后收拢错误处理逻辑,保证程序只有一个退出点,这在函数中有malloc-free,lock-unlock等二元动作时,非常有用,能避免绝大多数程序员遗忘的bug。
4、不准用do{}while(),因为我们推论,任何计算都是有先决条件的,几乎所有计算,都应该先判断后计算,后一步必须是前一步正确的前提下进行,无条件的执行,是非法的,也是不合适的。 
 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C#关于For循环break,goto,return的应用
第7章 程序控制结构
Excel如何制作年终盘点清单,你跟高手之间差了这段代码
CNC数字编程宏程式代码大全
一分教你学会制做炸弹
学编程就像个循环
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服