我发现了有趣的时刻:atexit()
函数对bionic
和glibc
的工作方式不同。这是一个例子:
#include <cstdlib>
#include <cstdio>
extern "C" {
void one(){
printf("one\n");
}
void two() {
printf("two\n");
atexit(one);
}
}
int main() {
atexit(two);
}
bionic
的结果:
two
glibc
的结果:
two
one
为什么结果不同?
答案 0 :(得分:3)
未指定在调用
atexit
函数之前调用exit
函数是否会成功。
ISO C标准,§7.22.4.2。所以这两种行为都是合规的在atexit
已运行其exit
处理程序时,您无法使用atexit
可靠地注册函数。
答案 1 :(得分:1)
此行为未指定。您可以多次使用atexit()
定义要调用的多个函数,但是一旦退出程序,就不能使用它(即,一旦离开main()
)。