C程序错误报告?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

我正在寻找一种强大的方式来报告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 )

用户回答回答于

可以将errno分为两个部分...一个模块号和一个模块错误代码。

eg.
#define MODULE_NAME_error_code ((MODULE_NUMBER << 16) | (error_code))

扫码关注云+社区