2012-12-25 4 views
4

재미있는 순간을 발견했습니다. 의 기능은 bionicglibc에 대해 다르게 작동합니다. bionic에 대한atexit() function 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); 
} 

결과 : glibc에 대한

two 

결과 :

two 
one 

왜 결과가 다릅니 까 다음은 그 예이다?

+0

또한 프로그램이 C가 아니지만 C++ –

답변

3

그것은 지정 여부 호출되는 exit 함수가 성공하기 전에 발생하지 않는 atexit 함수를 호출.

ISO C 표준 §7.22.4.2. 그래서 두 행동 모두 준수합니다. atexit을 사용하여 함수를 안정적으로 등록 할 수는 없지만 exit에는 이미 atexit 핸들러가 실행 중입니다.

+0

어디에서 standart를 찾을 수 있습니까? 당신은 7.20.4.2> – Arseniy

+0

@Pepelac을 의미합니까 : 초안 http://www.open-std.org/jtc1/sc22/wg14/에서 사용할 수 있습니다. –

1

이 동작은 지정되지 않습니다. 당신은 atexit() 여러 번 사용하여 호출 할 수있는 여러 기능을 정의 할 수 있지만 (당신이 main()를 떠나 일단 즉를) 이미 프로그램을 종료하고 일단 당신이 그것을 사용하지 않아야합니다.