首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >atexit()函数仿生与glibc

atexit()函数仿生与glibc
EN

Stack Overflow用户
提问于 2012-12-25 11:36:26
回答 2查看 534关注 0票数 4

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

代码语言:javascript
复制
#include <cstdlib>
#include <cstdio>
extern "C" {
    void one(){
    printf("one\n");
    }
    void two() {
    printf("two\n");
    atexit(one);
    }
}
int main() {
    atexit(two);
}

bionic**:**的结果

代码语言:javascript
复制
two

glibc**:**的结果

代码语言:javascript
复制
two
one

为什么结果不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-25 11:40:25

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

ISO C标准,第7.22.4.2节。因此,这两种行为都是兼容的;在atexit已经运行其atexit处理程序时,您无法使用exit可靠地注册一个函数。

票数 3
EN

Stack Overflow用户

发布于 2012-12-25 11:40:17

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14030273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档