我正在寻找一种可靠的方法来报告 C 库中的错误。考虑队列的简单示例:
struct queue *q = malloc(sizeof(*q));
if (NULL == q) {
/* malloc failed. now what ? */
return NULL; /* maybe ? */
}
好的,所以对于那个例子来说,返回 NULL
是无效的,所以返回它来发出错误信号是有意义的。但是
void *get_data()
{
/* stuff */
/* Error detected. NULL is a valid return, now what ? */
/* stuff */
}
此外,一旦我们发出错误信号,如何发出信号什么是错误?我想了想,没有满意的解决方案。
使用
errno
或其他一些全局对象不是 我想做的事情(也许 这些功能可以从 多线程等)。我想到了让客户供应 一些“状态”对象,可以是 通话后进行了检查,但是 会使 API 变得非常难看。
那么您对这个主题有何看法?您如何以干净的方式报告错误?
最佳答案
int get_data(void **ptr)
如果没有明显的'错误返回',那么可能你的输出值不应该是返回值。错误可以是 errno、其他一些自定义详细错误值 (*cough* HRESULT),如果函数成功则为 true/false,或者其他一些有用的信息(数据的长度,如果错误则为 -1 )
关于c - C 库中的错误报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6548749/