Namespaces
Variants
Actions

std::jmp_buf

From cppreference.com
< cpp‎ | utility‎ | program
 
 
Utilities library
General utilities
Relational operators (deprecated in C++20)
(C++20)(C++20)(C++20)  
(C++20)
(C++20)
(C++14)
(C++11)
(C++11)
(C++23)
(C++11)
(C++17)
Common vocabulary types
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)


 
 
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.

[edit] 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 {}x2 + {}x + {} = 0...\n", a, b, c);
 auto [x_0, x_1] = solve_quadratic_equation(a, b, c);
 std::cout << std::format ("x1 = {}, x2 = {}\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 1x2 + -3x + 2 = 0...
x1 = 1, x2 = 2
 
Solving 2x2 + -3x + -2 = 0...
x1 = -0.5, x2 = 2
 
Solving 1x2 + 2x + 3 = 0...
No real solution

[edit] See also

saves the context
(function macro) [edit]
jumps to specified location
(function) [edit]
C documentation for jmp_buf
Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/program/jmp_buf&oldid=148741"

AltStyle によって変換されたページ (->オリジナル) /