atexit 함수에 대해서
글쓴이: sok1029 / 작성시간: 금, 2010/01/29 - 2:02오후
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문 안의 내용은 어떻게 해서
처리가 될수 있는 거죠 ??
Forums:
답변
안녕하세요
뭔가 잘못이해하신거 같습니다.
atexit(..) 가 리턴하는 값은 atexit 실행하여 스택에 추가하는 작업등이 성공/실패에 따라 달라지는 값입니다.
atexit 매뉴얼을 보시면 아시겠지만 인자로 void (__cdecl *func )( void ) 를 받고 있습니다.
고로 스택에 함수 포인터를 넣어서 종료시 꺼내어 그 함수를 호출해줍니다.
atexit 호출이 실패하는 가장 간단한 경우를 살펴보면 시스템따라 다르지만 스택의 크기 이상으로 추가하면 에러를 뿜겠죠
댓글 달기