首页 > 解决方案 > GCC C:是否存在调用 __attribute__(cleanup) 函数的等价于 exit() 的函数?

问题描述

我读到当程序通过orcleanup提前终止时,注册的函数将不会被调用。是否有任何我可以调用的函数类似于(意味着我可以使用它来从除 之外的函数终止程序,例如信号处理程序),但它会调用所有已注册的函数?如果我使用的是 C++,我可以使用(因为在堆栈展开期间调用函数),但我需要它在 C 中。exit()longjmp()exit()main()cleanupthrow()cleanup

标签: cgccclang

解决方案


在 glibc 实现中,pthread_exit如果当前线程是唯一线程,则执行堆栈展开并终止程序。缺点是您无法指定退出状态。

要在堆栈展开期间执行清理函数,您需要使用-fexceptions.

(对于 2.34 之前的 glibc,您可能需要链接-lpthread以获取 . 的堆栈展开变体pthread_exit。)


推荐阅读