温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c - What happen if an exit occur inside the atexit handler?
c

c - 如果退出在atexit处理程序内发生怎么办?

发布于 2020-03-27 12:03:55

我知道atexit用于注册函数处理程序。然后,当代码中退出时,将调用该函数。但是,如果在函数处理程序内部发生退出怎么办?

我期待一个无限循环,但实际上程序可以正常退出。为什么?

void handler(){
    printf("exit\n");
    exit(1);
}

int maint(int argc, char *argv[]) {
    atexit(handler);
    exit(1);
}

查看更多

查看更多

提问者
Mattia Corradi
被浏览
229
StoryTeller - Unslander Monica 2019-07-02 20:07

该行为是不确定的。

7.22.4.4退出功能

2退出功能导致正常程序终止。没有调用at_quick_exit函数注册的函数。如果程序多次调用退出函数,或者除退出函数外还调用quick_exit函数,则行为是不确定的。

调用exit在一个at_exit处理程序(即出口的正常处理期间被运行)绝对是出口处的第二个呼叫。

正常退出是一种可能的行为,但是看到任何事情都会发生(行为的性质未定义),很可能会导致灾难。最好不要这样做。