std::jmp_buf
Von cppreference.com
| 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
Führen Sie diesen Code aus
#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) | |
| springt zur angegebenen Position (funktion) | |
| C-Dokumentation für jmp_buf
| |