home | help
std::jmp_buf(3) 	       C++ Standard Libary		 std::jmp_buf(3)

NAME
     std::jmp_buf - std::jmp_buf

Synopsis
	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 ex-
     ecution 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 {}xA^2 + {}x + {} = 0...\n",  a,  b,
     c);
	  auto [x_0, x_1] = solve_quadratic_equation(a, b, c);
	  std::cout << std::format("xa = {}, xa = {}\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 1xA^2 + -3x + 2 = 0...
      xa = 1, xa = 2

      Solving 2xA^2 + -3x + -2 = 0...
      xa = -0.5, xa = 2

      Solving 1xA^2 + 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

http://cppreference.com 	   2024.06.10			 std::jmp_buf(3)

home | help