Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1668152
  • 博文数量: 1493
  • 博客积分: 38
  • 博客等级: 民兵
  • 技术积分: 5834
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-19 17:28
文章分类

全部博文(1493)

文章存档

2016年(11)

2015年(38)

2014年(137)

2013年(253)

2012年(1054)

2011年(1)

分类:

2012-11-14 14:39:45

驱动中多使用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;
阅读(314) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~