c - c : different approaches 中的库错误管理

标签 c dll error-handling

这是我第一次开发足够严肃的东西,所以我必须管理错误。我想到了三种可以使用的方法:

COMDS_RETURN some_function(....)

这种方法的问题是,有时更容易返回指向“数据”的指针,例如指向链表的指针,但如果函数失败,我无法知道它失败的原因。

我的第二种方法是始终附加一个“错误”参数:

pointer_to_data *some_function(...., error *myerror)

但在这里我总是会在每个函数中添加额外参数的开销,并且对于某些返回错误的函数,它比第一种方法更好。

好吧,第三种方法是混合使用第一种方法,但这里的问题还是在于库没有统一的调用/错误检查模型。对于一个功能,您必须以第一种方式执行,对于另一个功能,您必须以第二种方式执行。

我想知道这三种方法(或现有的另一种方法)之间最好的方法是什么。

最佳答案

请注意,没有“最佳”方式;这取决于您的用例,每种方法都有其优缺点。

例如,COM 对象通常返回一个 HRESULT 状态值。如果他们需要将数据返回给用户,他们会添加一个额外的参数作为指向要写入的数据的指针。这样做的好处是能够在通话中检查状态,即

if (FAILED(d3dDevice->CreateBuffer(...)) {
    // handle failure...
}

C 库中的许多函数都有一个特殊的返回值来指示失败。然后,用户可以引用 errno 以获得有关错误的更多信息。这样做的好处是不必事先声明数据变量并将它们作为额外参数传递。

关于c - c : different approaches 中的库错误管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28345955/

相关文章:

c++ - 输入不是数字时输出错误。 C++

python - 统计模型的线性回归问题

c++ - 可以为资源文件#define 一个包含非 ANSI 字符的文字字符串吗?

c - 嵌套结构的首选分配

C DLL 和新数据服务进程之间基于云的 IPC

python ctypes加载dll返回新的malloc'd缓冲区

c++ - 嵌套 DLL 包含 Visual Studio 中的配置

c - 配置文件错误

c++ - 编译器怎么会认为这个变量不是常量?

excel - 通过父子程序的错误处理取消子子程序