当在 C 库中以一致的方式处理错误时,您认为“最佳实践”是什么。
我一直在想两种方法:
总是返回错误代码。典型的函数如下:
MYAPI_ERROR getObjectSize(MYAPIHandle h, int* returnedSize);
始终提供一个错误指针方法:
int getObjectSize(MYAPIHandle h, MYAPI_ERROR* returnedError);
当使用第一种方法时,可以像下面这样编写代码,其中错误处理检查直接放在函数调用上:
int size;
if(getObjectSize(h, &size) != MYAPI_SUCCESS) {
// Error handling
}
它看起来比这里的错误处理代码更好。
MYAPIError error;
int size;
size = getObjectSize(h, &error);
if(error != MYAPI_SUCCESS) {
// Error handling
}
但是,我认为使用返回值来返回数据可以使代码更具可读性,很明显,在第二个示例中,某些内容被写入到 size 变量中。
你知道为什么我更喜欢这些方法或者混合使用它们或者使用其他方法吗?我不喜欢全局错误状态,因为它往往使多线程使用库更加痛苦。
编辑: C + + 在这方面的具体想法也很有趣,只要他们不涉及异常,因为这不是我目前的一个选项..。