我发现了有趣的时刻: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**:**的结果
twoglibc**:**的结果
two
one为什么结果不同?
发布于 2012-12-25 11:40:25
未指定调用
atexit函数之前未发生的对exit函数的调用是否会成功。
ISO C标准,第7.22.4.2节。因此,这两种行为都是兼容的;在atexit已经运行其atexit处理程序时,您无法使用exit可靠地注册一个函数。
发布于 2012-12-25 11:40:17
此行为未指定。您可以使用atexit()多次定义要调用的多个函数,但一旦退出程序(即一旦离开main()),就不能使用它。
https://stackoverflow.com/questions/14030273
复制相似问题