gpt4 book ai didi

c++ - 来自 API 的错误代码......处理的最佳做法是什么

转载 作者:行者123 更新时间:2023-11-30 03:13:36 24 4
gpt4 key购买 nike

我正在使用专有 API 编写主机应用程序。当发生错误时,此 API 会返回错误代码。我需要您提供关于在我的主机应用程序中推送错误代码和管理它们的最佳方法的建议:这是一个简短的例子:

CCas.cpp

CMD_STATUS CCas::shutdown() const
{
/* CMD_STATUS_OK is an API return code */
uint8_t statusByte = CMD_STATUS_OK;

/* Shutdown the CAS system */
if (CMD_STATUS_OK != (statusByte = CAS_Master_ShutDown()))
return statusByte;

/* Set nReset to HIGH */
...
...

/* Done the system is OFF */
return statusByte;
}

main.cpp

int main(char *argc, char **argv)
{
CMD_STATUS retByte = CMD_STATUS_OK;
CCas vmx;

if(retByte != vmx.shutdown())
/* Something wrong happened */
return retByte;

return 0
}

在我的示例中,在方法 shutdown 中出现错误时,我将 statusByte 变量中的错误推送到 main 中,然后在 main 中捕获错误并停止程序。

我是以正确的方式使用它还是有另一种方式来做。我是否需要在 main.c 文件中创建自己的错误代码?

请您指教。

谢谢

最佳答案

这里没有确定的答案,也没有一种方法是最终的黄金方法。
无论您做什么,我都会说 - 保持一致。
如果您正在编写 C++ 代码,您可能应该考虑使用异常而不是错误代码。
异常有助于以无忧无虑的方式编写您的 host 代码,并有助于打破主代码中的错误处理逻辑:

try {
apiCall();
anotherApiCall();
yetAnotherApiCall();
} catch (someKindOfError){
// Handle error here
} catch (anotherKindOfError){
// Handle other errors here
} catch (baseError){
// A more generic error handling here
} catch (...){
// Just make sure you don't catch what you can't handle and leave higher layers handle it
}

另一种方法是使用错误代码,代码被 if this then that 所破坏,但它仍然是一种有效的方法。
在这种情况下,我会形成一个表示成功的常量(如 posix 0),然后是:

ErrorType retVal = someApiCall();
if (retVal != ErrorCodeSuccess){
// either handle generic error or try to find out if it's a specific error, etc.
if (retVal == ErrorCodeCatIsHungry){
// Handle error here and probably bail out by calling 'return retVal;'
}
}

有些人使用返回失败代码的方法(void 函数返回 bool 值,返回对象的函数返回 null 或静态标志对象来表示错误)和然后根据要求调用更详细的错误函数:getLastErrorOfMyLovelyApi()
不是我个人的喜好,但有时在错误可能是一组复杂信息的 C API 中很有用。
这一切都取决于您的受众是谁,您为他们提供了哪些工具(C++ 有异常(exception),C 没有),以及您的个人品味。
如果您问我,异常(exception)情况(即使只是来自 stdexcept 的标准异常(exception)情况)就是您的情况。

关于c++ - 来自 API 的错误代码......处理的最佳做法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58554740/

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