c++ - 如何在 C++ 异常处理中包装我的 C 代码?

标签 c++ exception

我有一个基于 C 的旧项目,我想将其从 Atmel 处理器移植到 Raspberry Pi。

在编写它的时候,C++ 不是一个选项,而且要将它全部转换为 C++ 会花费太多精力,几乎是重写。

有些问题/崩溃不能(轻易)被 C 捕捉到,所以有时我的程序会死掉,我想在过期前发送最后一次求救机会。没有尝试恢复,我什至可以在没有错误细节的情况下生活,只要我收到一条消息告诉我访问设备

长话短说,我认为如果我有异常处理,我可以有更好的错误检测。

我正在考虑使用异常处理作为提醒我去设备并获取完整的错误日志、重置硬件等的机会。如果我的代码,C 不会总是给我最后一次做某事的机会爆炸

由于我不想完全重写 C++,是否只需将 main() 包装在 try/catch 中就足够了>?

这在技术上是否足够,还是我需要做更多?

除了更详细的错误报告之外,将每个(主要)函数包装在它自己的 try/catch 中还有什么好处吗?

最佳答案

Other than more detailed error reporting, is there anything to gain by wrapping every (major) function in it's own try / catch?

首先,仅在您能够改变程序的行为以响应异常时捕获异常(除非您只是想通过 std::throw_with_nested() 添加更多上下文信息) >)

其次,c 程序不会显示 RAII,因此在这种情况下抛出异常可能会泄漏资源,除非您将所有句柄和内存分配包装在智能指针或支持 RAII 的句柄类中。

您应该在考虑添加异常处理之前执行此操作。

如果该程序很可能在未来得到积极维护,那么这样做可能会有一定的好处。如果没有,最好让熟睡的狗躺下。

关于c++ - 如何在 C++ 异常处理中包装我的 C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40619700/

相关文章:

c++ - 模板递归不会停止

java - Java 中等效的 'nth_element' 函数是什么?

c++ - header 和未解析的外部符号

java - 在任何情况下(在实践中),在 catch block 中抛出 Exception 是有用的吗?

Android - 崩溃报告通知

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?

c++ - 构建 cpp-netlib 共享库

c++ - 在不直接修改地址的情况下执行地址时引发异常

exception - 如何从 CFC 文件获取异常详细信息

c++ - =* 是什么意思? (Winsock-C++)