Namespaces
Variants

std:: jmp_buf

From cppreference.net
Utilities library
Definiert in Header <csetjmp>
typedef /* unspecified */ jmp_buf ;

Der std::jmp_buf -Typ ist ein Array-Typ, der geeignet ist, Informationen zur Wiederherstellung einer Aufrufumgebung zu speichern. Die gespeicherten Informationen sind ausreichend, um die Ausführung am korrekten Block des Programms und den Aufruf dieses Blocks wiederherzustellen. Der Zustand von Gleitkomma-Statusflags, offenen Dateien oder anderen Daten wird nicht in einem Objekt vom Typ 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