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; } } }