【问题标题】:atexit() function bionic vs glibcatexit() 函数仿生与 glibc
【发布时间】:2012-12-11 09:40:00
【问题描述】:

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

为什么结果不同?

【问题讨论】:

  • 另外你的程序不是 C 而是 C++

标签: c++ g++ glibc bionic


【解决方案1】:

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

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

【讨论】:

  • 在哪里可以找到标准?你的意思是 7.20.4.2>
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多