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

来源:百度文库 编辑:神马文学网 时间:2024/04/29 02:52:43

前段时间和大家讨论关于我为什么不用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(),因为我们推论,任何计算都是有先决条件的,几乎所有计算,都应该先判断后计算,后一步必须是前一步正确的前提下进行,无条件的执行,是非法的,也是不合适的。 
 

关于程序控制逻辑的讨论 - 笔记 - 肖舸 - CSDN学生大本营 - Powered b... 学习C语言的必备基础知识 - 笔记 - 徐名峰 - CSDN学生大本营 - Powered... 如何有效地记忆与学习 - 笔记 - 编程之美 - CSDN学生大本营 - Powered ... 当“友元”遇到“虚函数” - 笔记 - 南郁 - CSDN学生大本营 - Powered ... 设计,是一种态度 - 笔记 - 斌斌 - CSDN学生大本营 - Powered by U... 职场随笔-走好那段路! - 笔记 - 李天平 - CSDN学生大本营 - Powered by UCenter Home [转]VC _T的用途 - 笔记 - summer - CSDN学生大本营 - Power... 6.3.4 使用MFC::CArchive - 笔记 - 白乔 - CSDN学生大本营 -... 就要离开人人网的工作了,总结来北京的这两年! - 笔记 - 迟宏泽 - CSDN学生大本营... 我还会再回来的——计算机达人成长之路(19) - 笔记 - 朱云翔 - CSDN学生大本营... 学习编程需要什么英语基础? - 笔记 - 南郁 - CSDN学生大本营 jiushi世情熟,则人情易流; 世情疏,则交情易阻。 - 笔记 - 潘勇 - CSDN学生大本营 英语专业学生的笔记(关于作文)... Spring事务管理 - Java - 课堂 - 话题 - 迟宏泽 - CSDN学生大本营... 关于B/S结构的效率的讨论 英语专业学生的笔记(关于作文)1 霸权之后? ——当代世界的权力结构 - 思想讨论 - 中国思想论坛 - Powered b... 兴华论坛-『哲学与逻辑』-关于时间概念的哲学讨论 关于大讨论的讨论 谈谈《红楼梦》中贾府的“扫黄打非” - 灌水乐园 - 学生在线论坛 - Powered b... 关于Apache服务器安装的问题 - JAVA讨论区 - 漫游高达 - Powered by Discuz! 关于fork的讨论 B股市场改革背后的逻辑 B股市场改革背后的逻辑