C语言下的错误处理问题

时间:2023-12-15 20:56:44

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

方式一:

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

在不符合条件的情况下使用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;
    }
  }
}