很多情况下,某个函数需要在返回时销毁创建的资源,例如malloc的资源需要free掉,但是当有多个退出分支时,就需要每个分支都重复销毁的动作,例如:
void fun()
{
malloc();
if()
{
...;
free();
return;
}
if()
{
...;
free();
return;
}
...;
}
多次重复相同的代码,这明显不是好的编程方式,那么如何将这些销毁动作统一处理呢?可以采取两种方式实现:
1、goto
void fun()
{
malloc();
if()
{
...;
goto end;
}
if()
{
...;
goto end;
}
...;
end:
free();
}
2、goto语句用太多容易造成逻辑混乱难以理解,那么我们可以采取另外一种方式,do{}while(0),通常建议使用这种方式;
void fun()
{
malloc();
do
{
if()
{
...;
break;
}
if()
{
...;
break;
}
...;
}while(0);
free();
}