Namespaces
Variants

std::jmp_buf

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades del programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
 
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

#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)