当前位置:首页 > 公众号精选 > 嵌入式ARM
[导读]很多书籍都会把“”goto“”当成反面教材使用,认为如果使用不当,将会造成很多意想不到的问题。但goto作为C语言的一部分,存在即合理,goto有它的缺点,也有它的优点。



很多书籍都会把“”goto“”当成反面教材使用,认为如果使用不当,将会造成很多意想不到的问题。但goto作为C语言的一部分,存在即合理,goto有它的缺点,也有它的优点。
缺点:
很容易把逻辑弄乱,增加理解难度,goto是可以实现无条件跳转的,一旦跳转,就忽略很前面很多代码,特别是在一些逻辑复杂的地方使用,会很容易出问题。所以goto能不用就不用,特别对于新手,尽量避讳。

优点:
方便处理异常情况,特别是内存等系统资源的释放。很多大型项目,开源项目,包括Linux内核,都会使用goto来处理异常情况。
举个例子,以下情况,大家第一反应是没有问题,其实是存在内存泄漏隐患的。如果变量pdate2申请失败,则退出函数。那么问题来了, pdate 申请成功了,但没有得到释放,出现了内存泄漏。所以这种情况如果使用goto,就很容易解决问题。
int module_init(){ char *pdate = (char *)malloc(100); if(pdate == NULL) return -1;
char *pdate2 = (char *)malloc(100); if(pdate2 == NULL) return -1;
free(pdate); free(pdate2); ......}

goto实现代码

int module_init(){ char *pdate = (char *)malloc(100); if(pdate == NULL) goto err;
char *pdate2 = (char *)malloc(100); if(pdate2 == NULL) goto err;
free(pdate); free(pdate2); ......
err://统一的出错处理 if(pdate != NULL) free(pdate); if(pdate2!= NULL) free(pdate2);  return -1;}
另一种写法就是分阶段处理:
 if(pdate == NULL)    goto err1;    ...  if(pdate2 == NULL) goto err2; ... err1:  free(pdate); err2:  free(pdate2);  ...


总结:存在即合理,好坏取决于如何使用。


-END-


来源 | 二进制人生

作者 | 二进制人生


整理文章为传播相关技术,版权归原作者所有 |

如有侵权,请联系删除 |


【1】干货:嵌入式C语言源代码优化方案

【2】C语言内存泄露很严重,如何应对?

【3】C语言函数指针之回调函数

【4】光刻机原理解析——光刻机到底在“刻”什么?

【5】华为继鸿蒙OS后,即将发布国产编程语言!



免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

换一批

延伸阅读

[strongerHuang] Keil MDK下i.MXRT的串行NOR Flash下载算法设计

关注+星标公众号,不错过精彩内容 作者 | 痞子衡 转自 | 痞子衡嵌入式 今天转载痞子衡嵌入式的一篇文章,给大家Keil MDK工具...

关键字: C语言 嵌入式

[小林coding] 图解6种“树”,你心中有数吗?

数据结构这门课程是计算机相关专业的基础课,数据结构指的是数据在计算机中的存储、组织方式。 我们在学习数据结构时候,会遇到各种各样的基础数据结构,比如堆栈、队列、数组、链表、树...这些基本的数据结构类型有各...

关键字: 数据结构 嵌入式

[嵌入式大杂烩] 什么是不完全类型?

点击上方「嵌入式大杂烩」,「星标公众号」第一时间查看精彩文章! C语言类型 C的类型分为: 对象类型(char、int、数组、指针、结构体等)...

关键字: C语言 嵌入式

[21ic电子网] 深度好文!30分钟玩转C语言指针

深度好文!30分钟玩转C语言指针

作者:Harris Wilde,http://www.techzone.ltd/post/CPointer/ 说到指针,估计还是有很多小伙伴都还是云里雾里的,有点“知其然,而不知其所以然”。但是,不得不...

关键字: C语言 嵌入式

[嵌入式ARM] 单片机技术是一门即将被淘汰的技术吗

目前来说,这十几年内是不可能淘汰的,即使面临着人工AI、大数据和云计算等技术的多方面竞争,单片机也可以说是立于不败之地!毕竟需求放在那里。单片机技...

关键字: 单片机 嵌入式

嵌入式ARM

631 篇文章

关注

发布文章

技术子站

关闭