std::jmp_buf
De es.cppreference.net
| Definido en el encabezado <csetjmp>
|
||
typedef /* unspecified */ jmp_buf;
|
||
El tipo std::jmp_buf es un tipo array adecuado para almacenar información necesaria para restaurar un entorno de llamada. La información almacenada es suficiente para restaurar la ejecución en el bloque correcto del programa y la invocación de ese bloque. El estado de los indicadores de punto flotante, o de los archivos abiertos, o de cualquier otro dato no se almacena en un objeto de tipo std::jmp_buf.
Ejemplo
Ejecutar este código
#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); // Ir al manejador de errores 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("Resolviendo {}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)) { // Manejador de errores para el resolvedor std::cout << "No hay solución real\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; }
Salida:
Resolviendo 1x² + -3x + 2 = 0... x₁ = 1, x₂ = 2 Resolviendo 2x² + -3x + -2 = 0... x₁ = -0.5, x₂ = 2 Resolviendo 1x² + 2x + 3 = 0... No hay solución real
Véase también
|
guarda el contexto
(macro de función) |
|
|
salta a ubicación especificada
(función) |
|
|
Documentación de C
para
jmp_buf
|
|