许多书会使用“ goto”或“ goto”。
作为否定的教科书,认为如果使用不当,会引起很多意想不到的问题。
但是作为C语言的一部分,goto是合理的。
后藤既有缺点,也有优点。
缺点:容易弄乱逻辑并增加理解的难度。
Goto可以实现无条件的跳转。
跳转后,您将忽略很多先前的代码,尤其是在逻辑上很复杂的地方,这很容易引起问题。
因此,可以在没有它的情况下使用goto,尤其是对于新手,请避免忌讳。
优点:处理异常情况特别方便,尤其是内存等系统资源的释放。
许多大型项目,开源项目(包括Linux内核)将使用goto处理异常情况。
例如,在以下情况下,每个人的第一反应是没有问题,实际上,存在内存泄漏的隐患。
如果变量pdate2应用程序失败,则函数退出。
然后问题来了。
pdate应用程序成功,但未发布,并且存在内存泄漏。
因此,如果在这种情况下使用goto,则很容易解决问题。
int module_init(){char * pdate =(char *)malloc(100); if(pdate == NULL)返回-1; char * pdate2 =(char *)malloc(100); if(pdate2 == NULL)返回-1;免费(日期);免费(pdate2); ......}转到实现代码int module_init(){char * pdate =(char *)malloc(100); if(pdate == NULL)转到err; char * pdate2 =(char *)malloc(100); if(pdate2 == NULL)转到err;免费(日期);免费(pdate2); ...... err://统一错误处理if(pdate!= NULL)free(pdate); if(pdate2!= NULL)免费(pdate2); return -1;}另一种写法是分阶段进行处理:if(pdate == NULL)goto err1; if(pdate == NULL)转到err1; if(pdate == NULL)(pdate2 == NULL)转到err2; ... err1:free(pdate); err2:free(pdate2); ...摘要:存在是合理的,好坏取决于如何使用它。
-END-来源|二元生命作者|二进制生命|本文经过编译以传播相关技术,并且版权归原作者所有。
| |如有侵权,请联系删除| [1]干货:嵌入式C语言源代码优化程序[2] C语言内存泄漏非常严重,该如何处理? [3] C语言函数指针的回调函数[4]光刻机的原理分析—光刻机“雕刻”到底是什么? [5]华为即将在宏梦OS之后发布国内编程语言!