C语言下的错误处理问题

今天来分享我认为比较好的几种在C语言下的错误处理方式

方式一:

int example(int num)
{
    if(num < 0)
    {
        return 1;
    } 
    return 0;
}

在不符合条件的情况下使用return终止程序

方式二:

void example()
{if(!dosomething())
    {
      goto _End;
    }
  if(!dosomething())
  {
    goto _End;
  }

_End:
    {
        //dosomething
    }
}

例子中的两个goto _End;语句的内容在你的程序中可能是一样的,那么使用goto就使得程序变得好维护了。举个例子:有资源申请就需要释放,如果在if判断前你用到了malloc或其他的申请资源空间(假设在此程序调用完毕后不会再用到), 那么势必要释放,不释放的话会造成内存泄露,那么问题来了,如果你这段代码中有很多的if判断条件,那岂不是需要写很多的资源释放?不是不可以,不过代码没有那么好看而且也不好维护,也难保你不会漏掉某一个if判断条件下的问题处理。所以用goto将相同的代码放在最后是比较好的一种方式。如果我文字描述无法让你理解请比较下面两个代码也可以联系我。

void example()
{
    char *p1 = NULL, p2 = NULL;
    p1 = (char *)malloc(sizeof(char));
    if(!p1)
    {
        return ;
    }

    p2 = (char *)malloc(sizeof(char));
    if(!p2)
    {
    free(p1);
    p1 = NULL;
    return ;
    }
  if(!dosomething())
  {
    free(p1);
    free(p2);
    p1 = NULL;
    p2 = NULL; 
    return ;
  }
}                                    
void example()
{
    char *p1 = NULL, p2 = NULL;
    p1 = (char *)malloc(sizeof(char));
    if(!p1)
    {
        return ;
    }

    p2 = (char *)malloc(sizeof(char));
    if(!p2)
    {
     goto _End;
    }
  if(!dosomething())
  {
    goto _End;
  }

_End:
    {
        if(p1)
      {
      free(p1)
      p1 = NULL;
    }
    if(p2)
    {
      free(p2)
      p2 = NULL;
    }
  }
} 

 

posted @ 2019-03-31 20:44  梅花五瓣  阅读(448)  评论(0编辑  收藏  举报