c - 如果在 atexit 处理程序内部发生退出会发生什么?
问题描述
我知道 atexit 用于注册函数处理程序。然后,当代码中出现退出时,调用该函数。但是如果函数处理程序内部发生退出怎么办?
我期待一个无限循环,但实际上程序正常退出。为什么?
void handler(){
printf("exit\n");
exit(1);
}
int maint(int argc, char *argv[]) {
atexit(handler);
exit(1);
}
解决方案
行为未定义。
7.22.4.4 退出函数
2 exit 函数导致程序正常终止。不调用 at_quick_exit 函数注册的函数。如果程序多次调用 exit 函数,或者在 exit 函数之外调用 quick_exit 函数,则行为未定义。
调用处理程序(exit
在at_exit
正常的退出处理期间运行)绝对是第二次退出调用。
正常退出是一种可能的行为,但看到任何事情都可能发生(行为的性质未定义),它很可能会导致灾难。最好不要这样做。
推荐阅读
- excel - VBA - 查找每个类别的最大值
- python - Python - 查找与另一个列表的元素匹配的列表元素的索引
- c# - Automapper 如何在 2 个泛型类型之间映射自定义接口
- c++ - OpenCV:反转图像的负片区域
- java - 为什么我可以两次声明一个变量的数据类型?
- android-studio - 从已安装的 APK 发送请求失败,但使用模拟器和连接到 Android Studio 的同一部手机可以正常工作,为什么?
- oracle - ORA-00600: 编译返回流水线的函数时出现内部错误代码
- i2c - 通过 Atmel SAMG55 上的 i2c/TWI 接口的 MCP79411 RTC 连接
- arrays - 您如何使用数组公式来计算随着行向上移动而减少的运行总计?
- youtube - YouTube 嵌入 iOS Safari 昨天刚刚停止为我工作