# std::jmp_buf

From cppreference.com
< cpp‎ | utility‎ | program

Defined in header `<csetjmp>` |  |
typedef /* unspecified */ jmp_buf; |  |

The `std::jmp_buf` type is an array type suitable for storing information to restore a calling environment. The stored information is sufficient to restore execution at the correct block of the program and invocation of that block. The state of floating-point status flags, or open files, or any other data is not stored in an object of type `std::jmp_buf`.

### Example

Run this code

    #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;
    }

Output:

    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

### See also

setjmp | saves the context (function macro)
longjmp | jumps to specified location (function)
C documentation for jmp_buf

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/program/jmp_buf&oldid=148741"