-1

这个程序注册了一个函数调用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
4

1 回答 1

3

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

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

于 2013-12-07T20:45:25.393 回答