Namespaces
Variants

std:: jmp_buf

From cppreference.net
Utilities library
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

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