Namespaces
Variants

std::abort

cppreference.net에서 가져옴
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐기됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
Swap 및 타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
헤더 <cstdlib>
void abort();
에 정의됨 (C++11까지)
[[noreturn]] void abort() noexcept;
(C++11부터)

SIGABRT가 std::signal에 전달된 시그널 핸들러에 의해 잡히고 핸들러가 반환되지 않는 경우를 제외하고 비정상 프로그램 종료를 일으킵니다.

자동, 스레드 로컬(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; // Destructor not called

void signal_handler(int signal)
{
    if (signal == SIGABRT)
        std::cerr << "SIGABRT received\n";
    else
        std::cerr << "Unexpected signal " << signal << " received\n";
    std::_Exit(EXIT_FAILURE);
}

int main()
{
    Tester automatic_tester; // Destructor not called

    // Setup handler
    auto previous_handler = std::signal(SIGABRT, signal_handler);
    if (previous_handler == SIG_ERR)
    {
        std::cerr << "Setup failed\n";
        return EXIT_FAILURE;
    }

    std::abort(); // Raise SIGABRT
    std::cout << "This code is unreachable\n";
}

출력:

Tester ctor
Tester ctor
SIGABRT received

참고 항목

정리 작업을 수행하며 프로그램을 정상 종료시킴
(함수)
std::exit() 호출 시 실행될 함수를 등록함
(함수)
(C++11)
완전한 정리 작업 없이 프로그램을 빠르게 종료시킴
(함수)
std::quick_exit 호출 시 실행될 함수를 등록함
(함수)
특정 시그널에 대한 시그널 핸들러를 설정함
(함수)
예외 처리 실패 시 호출되는 함수
(함수)
C 문서 for abort