驱动中多使用goto来做错误处理,这样能比较好地的资源进行回收。
如果函数中有多个可能失败的语句,并且有资源要进行回收,使用goto去做错误处理是一种比较方便地做法。
在执行一条可能会失败的语句时,如果失败了就goto xxx_err;
在函数尾加上xxx_err: 标记并在xxx_err:上清除当前申请的资源,方便后面的错误处理。
例如:
fd1 = open();
if(fd1 < 0)
{
//err
goto fd1_open_err;
}
fd2 = open();
if(fd2 < 0)
{
//err
goto fd2_open_err;
}
fd3 = open();
if(fd3 < 0)
{
//err
goto fd3_open_err;
}
...
return 0;
close(fd3); //习惯性把每个的资源清理写上,即使用不上
fd3_open_err:
close(fd2);
fd2_open_err;:
close(fd1);
fd1_open_err:
return -1;
阅读(1184) | 评论(0) | 转发(2) |