Namespaces
Variants

std::jmp_buf

From de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (Grundlegende Typen, RTTI)
Feature-Test-Makros der Bibliothek (C++20)
Programmdienstprogramme
Variadische Funktionen
Koroutinen-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Dreiseitiger Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Dienstprogramme
Relationsoperatoren (veraltet in C++20)
Ganzzahlvergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Tausch- und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabular-Typen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
Definiert in Header <csetjmp>
typedef /* unspecified */ jmp_buf;

Der Typ std::jmp_buf ist ein Array-Typ, der zum Speichern von Informationen zur Wiederherstellung einer Aufrufumgebung geeignet ist. Die gespeicherten Informationen reichen aus, um die Ausführung im richtigen Block des Programms und beim Aufruf dieses Blocks wiederherzustellen. Der Zustand von Gleitkomma-Status-Flags, offenen Dateien oder anderen Daten wird nicht in einem Objekt des Typs std::jmp_buf gespeichert.

Beispiel

#include <array>
#include <cmath>
#include <csetjmp>
#include <cstdlib>
#include <format>
#include <iostream>
std::jmp_buf solver_error_handler;
std::array<double, 2> solve_quadratic_equation(double a, double b, double c)
{
    const double discriminant = b * b - 4.0 * a * c;
    if (discriminant < 0)
        std::longjmp(solver_error_handler, true); // Zum Fehlerbehandler springen
    const double delta = std::sqrt(discriminant) / (2.0 * a);
    const double argmin = -b / (2.0 * a);
    return {argmin - delta, argmin + delta};
}
void show_quadratic_equation_solution(double a, double b, double c)
{
    std::cout << std::format("Löse {}x² + {}x + {} = 0...\n", a, b, c);
    auto [x_0, x_1] = solve_quadratic_equation(a, b, c);
    std::cout << std::format("x₁ = {}, x₂ = {}\n\n", x_0, x_1);
}
int main()
{
    if (setjmp(solver_error_handler))
    {
        // Fehlerbehandler für den Löser
        std::cout << "Keine reelle Lösung\n";
        return EXIT_FAILURE;
    }
    for (auto [a, b, c] : {std::array{1, -3, 2}, {2, -3, -2}, {1, 2, 3}})
        show_quadratic_equation_solution(a, b, c);
    return EXIT_SUCCESS;
}

Ausgabe:

Löse 1x² + -3x + 2 = 0...
x₁ = 1, x₂ = 2
Löse 2x² + -3x + -2 = 0...
x₁ = -0.5, x₂ = 2
Löse 1x² + 2x + 3 = 0...
Keine reelle Lösung

Siehe auch

speichert den Kontext
(Funktionsmakro)
springt zu angegebener Position
(Funktion)
C-Dokumentation für jmp_buf