c - GCC 析构函数行为

标签 c gcc mingw destructor

我注意到在 linux 下编译和使用 mingw 交叉编译时,gcc 的析构函数的行为有所不同。

在 linux 上,除非程序自行正常终止(从 main 返回),否则不会调用析构函数。如果将信号处理程序考虑在内,我想这是有道理的。

然而,在 Win32 上,如果程序被 CTRL-C 终止,则调用析构函数,但当从任务管理器中终止时则不会。

这是为什么?无论进程如何终止,您会建议如何调用析构函数 - 特别是在 Win32 上?

示例代码:

#include <stdio.h>

int main(int argc, char **argv) {
        printf("main\n");
        while(1) {}
    return 0;
}

__attribute__((destructor)) static void mydestructor(void) {
        printf("destructor\n");
}

最佳答案

Window 上进程管理器的 kill 类似于 Linux 上的 kill -9 - 程序没有机会进行清理。

关于c - GCC 析构函数行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907158/

相关文章:

c - 遇到SIGINT时重启程序的练习

c - Mex 在 Linux 中编译 C 代码时生成错误//

c++ - 在命令行中正确链接库

c - 在 C 代码中使用 Cat 命令

上下文切换会导致堆栈溢出吗?

将 int 转换为 int* 然后再转换回 int

c++ - 使用不同的编译器——那有什么作用?

c++ - 尝试使用 gcc 工具链构建 Boost

c - 如何在 C 语言中只接受文件中的数值?

c - 从用户空间管理虚拟内存