2012-12-25 72 views
4

我發現有趣的時刻:atexit()函數對bionicglibc的作用不同。這裏有一個例子:atexit()函數bionic vs 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 

爲何結果不同?

+0

另外你的程序不是C但是C++ –

回答

3

沒有指定調用atexit函數的函數在調用exit函數之前是否成功。

ISO C標準§7.22.4.2。所以這兩種行爲都是合規的您無法使用atexit可靠地註冊功能,而exit已在運行其atexit處理程序。

+0

哪裏可以找到標準?你的意思是7.20.4.2> – Arseniy

+0

@Pepelac:草稿可從http://www.open-std.org/jtc1/sc22/wg14/獲得。 –

1

此行爲未指定。您可以使用atexit()多次定義多個要調用的函數,但是一旦您退出程序(即,您離開main()後),就不能使用它。