gpt4 book ai didi

c - C 代码中的错误处理

转载 作者:太空狗 更新时间:2023-10-29 16:14:25 25 4
gpt4 key购买 nike

当谈到在 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++ 的特定想法也很有趣,因为目前我不是一个选择...

最佳答案

这两种方法我都用过,它们都对我很有效。无论我使用哪一个,我总是尝试应用这个原则:

如果唯一可能的错误是程序员错误,请不要返回错误代码,在函数内部使用断言。

验证输入的断言清楚地传达了函数的期望,而过多的错误检查会混淆程序逻辑。决定如何处理所有各种错误情况确实会使设计复杂化。如果您可以坚持程序员永远不会传递一个空指针,为什么还要弄清楚 functionX 应该如何处理空指针?

关于c - C 代码中的错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/385975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com