在 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++ 的具体想法也会很有趣,因为目前这不是我的选择......
我喜欢错误作为返回值的方式。如果您正在设计 api,并且希望尽可能轻松地使用您的库,请考虑以下添加: