std::jmp_buf
From de.cppreference.net
| 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
Diesen Code ausführen
#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
|
|