4

我发现了一个有趣的时刻: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

为什么结果不同?

4

2 回答 2

3

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

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

于 2012-12-25T11:40:25.373 回答
1

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

于 2012-12-25T11:40:17.900 回答