std:: atexit
|
헤더 파일에 정의됨
<cstdlib>
|
||
| (1) | ||
|
int
atexit
(
/* c-atexit-handler */
*
func
)
;
int atexit ( /* atexit-handler */ * func ) ; |
(C++11 이전) | |
|
int
atexit
(
/* c-atexit-handler */
*
func
)
noexcept
;
int atexit ( /* atexit-handler */ * func ) noexcept ; |
(C++11 이후) | |
|
extern
"C"
using
/* c-atexit-handler */
=
void
(
)
;
extern "C++" using /* atexit-handler */ = void ( ) ; |
(2) | ( 설명 전용* ) |
func 가 가리키는 함수를 정상적인 프로그램 종료 시( std::exit() 호출 또는 main function 에서 반환될 때) 호출되도록 등록합니다.
|
이 함수들은 정적 객체들의 소멸 과정에서 역순으로 호출됩니다: A가 B보다 먼저 등록되었다면, B에 대한 호출이 A에 대한 호출보다 먼저 이루어집니다. 정적 객체 생성자들과
|
(until C++11) |
|
이 함수들은 정적 저장 기간을 가진 객체들의 소멸과 서로 동시에 호출될 수 있으며, A의 등록이 B의 등록보다 순서상 앞선 경우 B의 호출이 A의 호출보다 순서상 앞선다는 보장을 유지합니다. 정적 객체 생성자들과
|
(since C++11) |
동일한 함수가 여러 번 등록될 수 있습니다.
함수가 예외를 통해 종료되면, std::terminate 가 호출됩니다.
atexit
는 스레드 안전합니다: 여러 스레드에서 이 함수를 호출해도 데이터 경쟁이 발생하지 않습니다.
구현체는 최소 32개의 함수 등록을 지원함이 보장됩니다. 정확한 제한은 구현체 정의입니다.
목차 |
매개변수
| func | - | 정상적인 프로그램 종료 시 호출될 함수에 대한 포인터 |
반환값
0 등록이 성공하면 0, 그렇지 않으면 0이 아닌 값입니다.
참고 사항
두 오버로드는 func 매개변수의 타입이 서로 다르기 때문에 구별됩니다 ( language linkage 는 해당 타입의 일부입니다).
예제
#include <cstdlib> #include <iostream> void atexit_handler_1() { std::cout << "At exit #1\n"; } void atexit_handler_2() { std::cout << "At exit #2\n"; } int main() { const int result_1 = std::atexit(atexit_handler_1); const int result_2 = std::atexit(atexit_handler_2); if (result_1 || result_2) { std::cerr << "Registration failed!\n"; return EXIT_FAILURE; } std::cout << "Returning from main...\n"; return EXIT_SUCCESS; }
출력:
Returning from main... At exit #2 At exit #1
참고 항목
|
비정상적인 프로그램 종료를 발생시킵니다 (정리 작업 없이)
(함수) |
|
|
정리 작업과 함께 정상적인 프로그램 종료를 발생시킵니다
(함수) |
|
|
(C++11)
|
완전한 정리 작업 없이 빠른 프로그램 종료를 발생시킵니다
(함수) |
|
(C++11)
|
std::quick_exit
호출 시 실행될 함수를 등록합니다
(함수) |
|
C documentation
for
atexit
|
|