Namensräume
Varianten
Aktionen

std::abort

Von cppreference.com
< cpp‎ | utility‎ | program
 
 
Dienstprogramm-Bibliotheken
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Coroutine-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationale Operatoren (in C++20 veraltet)
 
 
Definiert in Header <cstdlib>
void abort();
(bis C++11)
[[noreturn]] void abort() noexcept;
(seit C++11)

Verursacht eine abnormale Programmbeendigung, es sei denn, SIGABRT wird von einem Signalhandler abgefangen, der an std::signal übergeben wurde, und der Handler gibt nicht zurück.

Destruktoren von Variablen mit automatischen, Thread-lokalen(seit C++11) und statischen Speicherdauern werden nicht aufgerufen. Ebenso werden Funktionen, die mit std::atexit() und std::at_quick_exit(seit C++11) registriert wurden, nicht aufgerufen. Ob offene Ressourcen wie Dateien geschlossen werden, ist implementierungsabhängig. Ein implementierungsabhängiger Status, der eine fehlerhafte Ausführung anzeigt, wird an die Host-Umgebung zurückgegeben.

Inhalt

[bearbeiten] Parameter

(keine)

[bearbeiten] Rückgabewert

Keiner, da die Funktion nicht zurückkehrt.

[bearbeiten] Ausnahmen

Wirft nichts.

[bearbeiten] Anmerkungen

POSIX schreibt vor, dass die Funktion abort() das Blockieren oder Ignorieren des Signals SIGABRT außer Kraft setzt.

Einige Compiler-Intrinsics, z. B. __builtin_trap (gcc, clang und icc) oder __fastfail/__debugbreak (msvc), können verwendet werden, um das Programm so schnell wie möglich zu beenden.

[bearbeiten] Beispiel

#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";
}

Ausgabe

Tester ctor
Tester ctor
SIGABRT received

[bearbeiten] Siehe auch

verursacht normalen Programmabbruch mit Bereinigung
(funktion) [bearbeiten]
registriert eine Funktion, die bei Aufruf von std::exit() aufgerufen wird
(funktion) [bearbeiten]
verursacht schnellen Programmabbruch ohne vollständige Bereinigung
(funktion) [bearbeiten]
registriert eine Funktion, die bei Aufruf von std::quick_exit aufgerufen wird
(funktion) [bearbeiten]
setzt einen Signal-Handler für ein bestimmtes Signal
(funktion) [bearbeiten]
Funktion, die aufgerufen wird, wenn die Ausnahmebehandlung fehlschlägt
(Funktion) [bearbeiten]
C-Dokumentation für abort