atexit()函数仿生与glibc

时间:2012-12-25 11:36:26

标签: c++ g++ glibc bionic

我发现了有趣的时刻:atexit()函数对bionicglibc的工作方式不同。这是一个例子:

#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

为什么结果不同?

2 个答案:

答案 0 :(得分:3)

  

未指定在调用atexit函数之前调用exit函数是否会成功。

ISO C标准,§7.22.4.2。所以这两种行为都是合规的在atexit已运行其exit处理程序时,您无法使用atexit可靠地注册函数。

答案 1 :(得分:1)

此行为未指定。您可以多次使用atexit()定义要调用的多个函数,但是一旦退出程序,就不能使用它(即,一旦离开main())。