`atexit` 함수

atexit 함수 (atexit)

프로그램이 정상 종료될 때 '마지막으로 꼭 하고 싶은 일'이 있다면, 그 일을 미리 등록해 두는 함수가 atexit이에요. 청소 같은 작업을 등록해 두면, exit가 불리거나 main에서 반환할 때 자동으로 실행돼요. 여러 개를 등록하면 실행 순서가 어떻게 되는지도 꼭 짚어 볼게요.

출처: cppreference

본문

함수 원형

<stdlib.h>에 정의돼 있어요.

int atexit( void (*func)(void) );

설명 (Explanation)

atexitfunc가 가리키는 함수를 정상 종료 시 호출되도록 등록해요. 여기서 정상 종료란 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 호출 시 불릴 함수 등록