嵌入式之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;
}

总结:存在即合理,goto视情况而定。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值