atexit() 함수는 프로그램이 종료될 때 호출될 사용자 정의 함수를 미리 등록할 수 있게 해주는 표준 라이브러리 함수입니다.
이 함수는 stdlib.h 헤더 파일에 선언되어 있는 사전 정의(predefined) 함수로, main 함수가 종료되거나 exit() 함수가 호출되어 프로그램이 정상적으로 끝나는 시점에 등록된 함수들을 자동으로 실행합니다.
atexit() 함수의 동작 원리
atexit()로 등록된 함수들은 LIFO(Last In First Out, 후입선출) 방식으로 실행됩니다. 즉, 나중에 등록한 함수가 먼저 호출됩니다. 따라서 여러 개의 함수를 등록할 때는 실행 순서에 주의해야 합니다.
예제 1
#include<stdio.h>
#include<stdlib.h>
void welcome(void){
printf("Welcome to New,");
}
void world(void){
printf("World\n");
}
int main(){
// atexit 테스트, 사용자 정의 함수 호출
atexit(world);
atexit(welcome);
return 0;
}출력 결과
Welcome to New,World
위 예제에서 world 함수가 먼저 등록되고 welcome 함수가 나중에 등록되었습니다. LIFO 순서에 따라 나중에 등록된 welcome이 먼저 실행되고, 그다음 world가 실행되므로 위와 같은 결과가 출력됩니다.
예제 2
#include<stdio.h>
#include<stdlib.h>
void first(void){
printf("This is a beautiful,");
}
void second(void){
printf("Wonderful life\n");
}
int main(){
// atexit 테스트, 사용자 정의 함수 호출
atexit(second);
atexit(first);
return 0;
}출력 결과
This is a beautiful,Wonderful life
마찬가지로 second를 먼저 등록하고 first를 나중에 등록했기 때문에, first가 먼저 실행된 후 second가 실행됩니다.
핵심 정리
- atexit()은 stdlib.h 헤더 파일에 포함된 사전 정의 함수입니다.
- 프로그램이 정상적으로 종료될 때(main 함수의 return 또는 exit() 호출 시) 등록된 함수가 자동으로 호출됩니다.
- 등록된 함수들은 LIFO(후입선출) 순서로 실행됩니다.
- C 표준 기준으로 최소 32개까지의 함수를 등록할 수 있습니다.