Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

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 informa-
       tion 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 han-
       dler

	    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

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

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::jmp_buf&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help