这个程序注册一个函数调用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
“这些回调不得调用exit()”并不意味着“如果这些回调调用exit(),则会发生特别有趣的事情”。它只表示“不做,否则您就一个人”。不同的POSIX兼容系统可能还会做其他事情,例如无限循环。由于您没有遵守规则,因此您无法指望会发生什么。
(不过,我假设几乎没有系统会陷入无限循环。避免这种情况很简单,而且我无法想象这是有用的结果。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句