天天看点

goto语句_goto语句对与错

goto语句_goto语句对与错
goto语句_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-

来源 | 二进制人生

作者 | 二进制人生

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

| 如有侵权,请联系删除 |

goto语句_goto语句对与错

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

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

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

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

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

goto语句_goto语句对与错