gpt4 book ai didi

c - 当我从 atexit 处理程序中调用 exit 时,为什么没有出现无限循环?

转载 作者:行者123 更新时间:2023-11-30 18:41:39 24 4
gpt4 key购买 nike

该程序用atexit()注册了一个调用exit()的函数。

#include <stdio.h>
#include <stdlib.h>

void machiavellian() {
puts("At exit");
exit(0);
}
int main(void) {
atexit(machiavellian);
exit(0);
}

来自man atexit

These callbacks must not call exit()

我正在等待无限循环,但它只调用一次machiavellian()。会发生什么?

$ make you_cant_exit_me
cc you_cant_exit_me.c -o you_cant_exit_me
$ ./you_cant_exit_me
At exit
$ echo $?
0

最佳答案

“这些回调不得调用 exit()”并不意味着“如果这些回调调用 exit(),就会发生特别有趣的事情”。它只是意味着“不要这样做,否则你就得靠自己了”。不同的 POSIX 兼容系统可能会执行其他操作,例如无限循环。由于您没有遵守规则,因此您无法指望会发生什么。

(不过,我认为很少有系统会进入无限循环。避免这种情况很简单,而且我无法想象这是一个有用的结果。)

关于c - 当我从 atexit 处理程序中调用 exit 时,为什么没有出现无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20446384/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com