atexit 함수에 대해서

sok1029의 이미지

atexit 함수는 즉 프로그램 종료부 처리를 맡는 함수로 알고 있는데요

예를 들어

main
{

if(atexit(a)!=0)
printf("a");

if(atexit(b)!=0)
printf("b");

if(atexit(c)!=0)
printf("c");

return 0;

}

이라 했을 때 atexit(c) atexit(b) atexit(a) 순으로 실행이 되는 것으로 알고 있는데요

근데 그 결과 가 !=0일 때(즉 오류가 발생했을 때)

printf()를 해주는 부분에 atexit()에 속하지 않는 데 어떻게 return이 되고 나서 실행이 될 수 있는 거죠?

다시 정리하면 atexit()는 종료 처리부 함수니까 프로그램 종료시 실행된다고 쳐도 거거에 해당하는 오류 처리문 if문 안의 내용은 어떻게 해서

처리가 될수 있는 거죠 ??

linusix의 이미지

안녕하세요

뭔가 잘못이해하신거 같습니다.

atexit(..) 가 리턴하는 값은 atexit 실행하여 스택에 추가하는 작업등이 성공/실패에 따라 달라지는 값입니다.

atexit 매뉴얼을 보시면 아시겠지만 인자로 void (__cdecl *func )( void ) 를 받고 있습니다.

고로 스택에 함수 포인터를 넣어서 종료시 꺼내어 그 함수를 호출해줍니다.

atexit 호출이 실패하는 가장 간단한 경우를 살펴보면 시스템따라 다르지만 스택의 크기 이상으로 추가하면 에러를 뿜겠죠