c/c++语言开发共享外部链接C库中的exception传播

我正在编写一个使用外部第三方C库的C ++库。 因此,我的图书馆将调用此第三方库中的函数,第三方库将回调到我的库的不同部分。

我想知道在这种情况下exception会发生什么? 假设MyLib :: foo()调用外部C库函数,最终调用MyLib :: bar(),并且bar抛出exception,会发生什么? 将exception正确传播到foo()中的处理程序吗?

谢谢!

    将exception正确传播到foo()的处理程序吗?

    我认为exception是否通过外部C代码传播是未定义的。 更糟糕的是,C代码没有准备好,无法处理exception。 C代码不需要抵御突然的,意外的返回,因此它不知道RAII等。

    当我遇到这种情况时,我在返回到C API之前捕获了exception,将其存储起来,并在从C API调用后重新抛出它。

    这是一个沉重的平台实现细节。 通常,exception管道有可能通过C函数激活帧来展开堆栈。 必要的是因为CRT通常是用C编写的。但是,C代码不太可能对它感到高兴,状态变异无法恢复。

    如果这是Windows,C代码确实有一个镜头。 C ++exception被捎带到Windows内置的通用exception支持中,称为结构化exception处理(SEH)。 您可以使用__try和__except关键字来调用可以恢复C代码状态的exceptionfilter。 显然这不便携。

    请不要在没有提及实施细节的情况下询问实施细节问题。

    阅读(并购买!)Herb Sutter的C ++编码标准

    #62:不允许exception跨模块边界传播。

      以上就是c/c++开发分享外部链接C库中的exception传播相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      www.ctvol.com true Article c/c++语言开发共享外部链接C库中的exception传播

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544811.html

      (0)
      上一篇 2021年1月9日 下午6:16
      下一篇 2021年1月9日 下午6:21

      精彩推荐