【发布时间】:2011-09-19 14:07:46
【问题描述】:
如果你有 c 代码,例如 png 库,你自己的 io 处理程序是用 c++ 编写的,并且由于某些 io 错误而引发异常。可以让它通过c代码并在c代码之外捕获它吗?我知道必须注意内存泄漏,但通常所有结构都会预先分配。
【问题讨论】:
-
如果你想使用 C 库来调用你的 C++ 回调,你会在其中抛出异常并确保在自己的代码中捕获它,那么你可以在 GCC 中使用@987654323 启用异常处理@ 编译你的 C 库时,它应该可以工作。
-
我认为这会引发未定义的行为。至少 C 代码不是异常安全的,所以它会左右泄漏资源。另请参阅此答案:stackoverflow.com/questions/6253574/…
-
+1 是我见过的唯一一个可以合法使用 [c] 和 [c++] 标签的问题。
-
@sbi:当然,如果发生异常,您将对 C 代码的错误承担全部责任。我想这只是用于奇怪的场景,你真的想为其他目的编写自己的 C 库,但又想通过它传递 C++ 函数,一切都在你的控制之下......
-
@Kerrek:但它不在你的控制之下。如果 C++ 异常突然出现,您将无法在 C 代码中自行清理。在 C 语言中你缺乏这样做的工具。这就是为什么对这些问题只有一个合理的答案:不要让 C++ 异常通过其他语言的代码,无论是 C 语言还是其他任何语言。