c - C 库中的错误报告

标签 c design-patterns error-reporting

我正在寻找一种可靠的方法来报告 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/

相关文章:

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

php - 我无法禁用 PHP 错误

c - C 中的程序在 OS X 上有问题,但在 Windows 上没有

c++ - Cuda矩阵复制程序很慢

java - 可配置系统的设计模式

c# - MVP 三元组之间的通信

c - 学习 C 试图通过函数找出这个 malloc 的东西

c - 如何使用 GCOV_PREFIX 移动 gcno 文件以及如何移动 gcda 文件?

c# - 只有一个表格是一个好习惯吗?

C++/Windows : How to report an out-of-memory exception (bad_alloc)?