`atexit` 함수
atexit 함수 (atexit)
프로그램이 정상 종료될 때 '마지막으로 꼭 하고 싶은 일'이 있다면, 그 일을 미리 등록해 두는 함수가 atexit이에요. 청소 같은 작업을 등록해 두면, exit가 불리거나 main에서 반환할 때 자동으로 실행돼요. 여러 개를 등록하면 실행 순서가 어떻게 되는지도 꼭 짚어 볼게요.
출처: cppreference
본문
함수 원형
<stdlib.h>에 정의돼 있어요.
int atexit( void (*func)(void) );
설명 (Explanation)
atexit는 func가 가리키는 함수를 정상 종료 시 호출되도록 등록해요. 여기서 정상 종료란 exit()를 호출하거나 main()에서 반환하는 경우를 뜻해요. 등록된 함수들은 등록한 순서와 반대 순서로 호출돼요. 즉 마지막에 등록한 함수가 가장 먼저 실행돼요.
같은 함수를 여러 번 등록해도 돼요. 표준은 구현이 최소 32개 함수를 등록할 수 있도록 보장하며, 정확한 한도는 구현 정의예요.
매개변수 (Parameters)
func— 정상 종료 시 호출될 함수를 가리키는 포인터
반환값 (Return value)
등록에 성공하면 0, 실패하면 0이 아닌 값을 돌려줘요.
예제 (Example)
f1, f2를 차례로 등록하고, 마지막에 f2를 한 번 더 등록했어요. 역순 실행이라 출력이 f2, f2, f1 순서로 나오는 걸 확인할 수 있어요.
#include <stdlib.h>
#include <stdio.h>
void f1(void)
{
puts("f1");
}
void f2(void)
{
puts("f2");
}
int main(void)
{
if ( ! atexit(f1) && ! atexit(f2) && ! atexit(f2) )
return EXIT_SUCCESS ;
// atexit registration failed
return EXIT_FAILURE ;
} // <- if registration was successful calls f2, f2, f1
출력:
f2
f2
f1
같이 보기 (See also)
at_quick_exit(C11) —quick_exit호출 시 불릴 함수 등록