关于程序控制逻辑的讨论

简介:
前段时间和大家讨论关于我为什么不用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(),因为我们推论,任何计算都是有先决条件的,几乎所有计算,都应该先判断后计算,后一步必须是前一步正确的前提下进行,无条件的执行,是非法的,也是不合适的。 
嗯,差不多这么多吧,有兴趣的话,建议看看我的书《0bug-C/C++商用工程之道》,里面讲得还要详细点。
 

本文转自 tonyxiaohome 51CTO博客,原文链接:http://blog.51cto.com/tonyxiaohome/318729 ,如需转载请自行联系原作者

相关文章
|
1天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
242 116
|
16天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
10天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
637 221
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
866 61
|
8天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1382 157
|
5天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
265 139
|
8天前
|
存储 安全 固态存储
四款WIN PE工具,都可以实现U盘安装教程
Windows PE是基于NT内核的轻量系统,用于系统安装、分区管理及故障修复。本文推荐多款PE制作工具,支持U盘启动,兼容UEFI/Legacy模式,具备备份还原、驱动识别等功能,操作简便,适合新旧电脑维护使用。
564 109