std:: jmp_buf
From cppreference.net
C++
Utilities library
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Program support utilities
| Program termination | |||||||||||||||||||||
|
|||||||||||||||||||||
| Unreachable control flow | |||||||||||||||||||||
|
(C++23)
|
|||||||||||||||||||||
| Communicating with the environment | |||||||||||||||||||||
| Signals | |||||||||||||||||||||
| Signal types | |||||||||||||||||||||
| Non-local jumps | |||||||||||||||||||||
| Types | |||||||||||||||||||||
|
jmp_buf
|
|||||||||||||||||||||
|
Definido en el encabezado
<csetjmp>
|
||
|
typedef
/* unspecified */
jmp_buf
;
|
||
El tipo
std::jmp_buf
es un tipo de matriz adecuado para almacenar información 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 las banderas de estado de punto flotante, o archivos abiertos, o 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
|
|