我有以下调用堆栈:
library_function_1 ====> my_function ====> library_function_2
calls calls
在 C++ 中,如果 library_function_2
抛出异常并 library_function_1
捕获它,my_function
可以使用析构函数(即 RAII)安全地清理(释放资源等)。
在 C# 中,类似地,my_function
可以使用 try
进行清理/finally
和 using
声明。
在 C 中,如果 library_function_1
使用 setjmp
和 library_function_2
longjmp
回到它,有没有办法my_function
清理?
最佳答案
唯一的方法是,如果从函数 library_function_1
传递 setjmp()
信息是通过您的函数(或者您可以访问它)您可以保存从中获得的信息,然后将另一个 setjmp()
放入您的函数代码中,并将其传递给 library_function_2
...在这种情况下,您正在拦截调用嵌套和 setjmp()
返回......内部函数将返回给你,因为它是它从 up 接收到的......然后你必须做一个 longjmp()
到您从 library_function_1
接收到的位置。
但如果您无法访问该信息,则无法拦截它。
关于c - 在 C 中,如果我的函数出现 longjmp "passes through",有什么方法可以清理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56985129/