std:: abort
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Program termination | |||||||||||||||||||||
|
|||||||||||||||||||||
| Unreachable control flow | |||||||||||||||||||||
|
(C++23)
|
|||||||||||||||||||||
| Communicating with the environment | |||||||||||||||||||||
| Signals | |||||||||||||||||||||
| Signal types | |||||||||||||||||||||
| Non-local jumps | |||||||||||||||||||||
| Types | |||||||||||||||||||||
|
헤더 파일에 정의됨
<cstdlib>
|
||
|
void
abort
(
)
;
|
(C++11 이전) | |
|
[
[
noreturn
]
]
void
abort
(
)
noexcept
;
|
(C++11 이후) | |
SIGABRT 신호가 std::signal 에 전달된 시그널 핸들러에 의해 catch되고 핸들러가 반환되지 않는 경우를 제외하고, 비정상적인 프로그램 종료를 유발합니다.
자동 , 스레드 로컬 (C++11부터) 및 정적 저장 기간 을 가진 변수들의 소멸자는 호출되지 않습니다. std::atexit() 와 std::at_quick_exit (C++11부터) 에 등록된 함수들도 호출되지 않습니다. 파일과 같은 열린 리소스들이 닫히는지는 구현에 따라 정의됩니다. 비정상적인 실행을 나타내는 구현 정의 상태가 호스트 환경에 반환됩니다.
목차 |
매개변수
(없음)
반환값
반환하지 않으므로 없음.
예외
아무것도 던지지 않습니다.
참고 사항
POSIX는
abort()
함수가
SIGABRT
신호의 차단 또는 무시를 재정의한다고 명시합니다.
일부 컴파일러 내장 함수, 예를 들어
__builtin_trap
(gcc, clang, 및 icc) 또는
__fastfail
/
__debugbreak
(msvc)는 프로그램을 가능한 한 빠르게 종료하는 데 사용될 수 있습니다.
예제
#include <csignal> #include <cstdlib> #include <iostream> class Tester { public: Tester() { std::cout << "Tester ctor\n"; } ~Tester() { std::cout << "Tester dtor\n"; } }; Tester static_tester; // 소멸자가 호출되지 않음 void signal_handler(int signal) { if (signal == SIGABRT) std::cerr << "SIGABRT received\n"; else std::cerr << "Unexpected signal " << signal << " received\n"; std::_Exit(); } int main() { Tester automatic_tester; // 소멸자가 호출되지 않음 // 핸들러 설정 auto previous_handler = std::signal(SIGABRT, signal_handler); if (previous_handler == SIG_ERR) { std::cerr << "Setup failed\n"; return EXIT_FAILURE; } std::abort(); // SIGABRT 발생 std::cout << "This code is unreachable\n"; }
출력:
Tester ctor Tester ctor SIGABRT received
참고 항목
|
정리 작업을 수행하며 프로그램을 정상 종료시킴
(함수) |
|
|
std::exit()
호출 시 실행될 함수를 등록함
(함수) |
|
|
(C++11)
|
완전한 정리 작업 없이 프로그램을 빠르게 종료시킴
(함수) |
|
(C++11)
|
std::quick_exit
호출 시 실행될 함수를 등록함
(함수) |
|
특정 시그널에 대한 시그널 핸들러를 설정함
(함수) |
|
|
예외 처리 실패 시 호출되는 함수
(함수) |
|
|
C 문서
for
abort
|
|