Namespaces
Variants

std:: abort

From cppreference.net
Utilities library
헤더 파일에 정의됨 <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)
완전한 정리 작업 없이 프로그램을 빠르게 종료시킴
(함수)
std::quick_exit 호출 시 실행될 함수를 등록함
(함수)
특정 시그널에 대한 시그널 핸들러를 설정함
(함수)
예외 처리 실패 시 호출되는 함수
(함수)
C 문서 for abort