如果C ++共享库在C项目中抛出异常会发生什么

时间:2014-02-06 11:58:00

标签: c++ c exception shared-libraries

我正在用C API编写共享库,但大多数代码都是用C ++编写的。 在某些地方我想抛出异常,但我不知道如果第三方开发人员想要用纯C编写项目会发生什么。

当C ++共享库在纯C项目中抛出异常时会发生什么?

2 个答案:

答案 0 :(得分:3)

不是个好主意。你一定会泄漏内存。

一个明智的选择是让你在C ++库中有一个catch站点,它填充一个特定于线程的错误信息对象,并重构每个接口函数,使其返回状态代码,表示已生成错误。 (参见Microsoft的组件对象模型HRESULT和IErrorInfo)。然后,您提供调用库的函数以提取错误详细信息。

答案 1 :(得分:1)

如果C ++异常冒泡到C代码中,那么您将获得未定义的行为。这是因为每种语言的堆栈帧彼此异或。 C ++运行时将尝试将堆栈帧展开为C代码,并假设在为C ++实际设置C时为C ++设置了堆栈帧和运行时。

如果你很幸运,你的应用程序会崩溃,你很快就会知道这个问题。如果你运气不好,它会持续一段时间,你会发现一些很难找到的错误!