std::abort

Defined in header <cstdlib>
             void abort();
(until C++11)
[[noreturn]] void abort();
(since C++11)

Causes abnormal program termination unless SIGABRT is being caught by a signal handler passed to signal and the handler does not return.

Destructors of variables with automatic, thread local and static storage durations are not called. Functions passed to std::atexit() are also not called. Whether open resources such as files are closed is implementation defined. Implementation defined status is returned to the host environment that indicates unsuccessful execution.

Parameters

(none).

Return value

(none).

Exceptions

(none) (until C++11)
noexcept specification:
noexcept
(since C++11)

Example

#include <csignal>
#include <iostream>
#include <cstdlib>
 
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";
}

Output:

Tester ctor
Tester ctor
SIGABRT received

See also

causes normal program termination with cleaning up
(function)
registers a function to be called on std::exit() invocation
(function)
(C++11)
causes quick program termination without completely cleaning up
(function)
sets a signal handler for particular signal
(function)
C documentation for abort
doc_CPP
2016-10-11 10:00:06
Comments
Leave a Comment

Please login to continue.