该程序使用exit()
注册一个调用atexit()
的函数。
#include <stdio.h>
#include <stdlib.h>
void machiavellian() {
puts("At exit");
exit(0);
}
int main(void) {
atexit(machiavellian);
exit(0);
}
来自man atexit
这些回调不得调用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
答案 0 :(得分:3)
“这些回调不能调用exit()”并不意味着“如果这些回调调用exit(),将会发生特别有趣的事情”。它只是意味着“不要做,或者你自己做”。一个不同的POSIX兼容系统可能会做其他事情,比如无限循环。由于你没有遵守规则,你不能指望会发生什么。
(我认为很少,如果有任何系统会进入无限循环。避免这种情况是微不足道的,我无法想象它是一个有用的结果。)