Namensräume
Varianten
Aktionen

std::jmp_buf

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 <csetjmp>
typedef /* Nicht spezifiziert */ jmp_buf;

Der Typ std::jmp_buf ist ein Array-Typ, der geeignet ist, Informationen zur Wiederherstellung einer aufrufenden Umgebung zu speichern. Die gespeicherten Informationen reichen aus, um die Ausführung an der richtigen Stelle des Programms und der entsprechenden Ausführung dieses Blocks wiederherzustellen. Der Zustand von Gleitkomma-Statusflags, offenen Dateien oder anderen Daten wird nicht in einem Objekt vom Typ std::jmp_buf gespeichert.

[bearbeiten] 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); // Go to error handler
 
    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("Solving {}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))
    {
        // Error handler for solver
        std::cout << "No real solution\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

Solving 1x² + -3x + 2 = 0...
x₁ = 1, x₂ = 2
 
Solving 2x² + -3x + -2 = 0...
x₁ = -0.5, x₂ = 2
 
Solving 1x² + 2x + 3 = 0...
No real solution

[bearbeiten] Siehe auch

speichert den Kontext
(Funktionsmakro) [bearbeiten]
springt zur angegebenen Position
(funktion) [bearbeiten]
C-Dokumentation für jmp_buf