|
|
Defined in header <csetjmp> | ||
typedef/* unspecified */ jmp_buf; | ||
Thestd::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 typestd::jmp_buf
.
#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){constdouble discriminant= b* b-4.0* a* c;if(discriminant<0)std::longjmp(solver_error_handler,true);// Go to error handler constdouble delta=std::sqrt(discriminant)/(2.0* a);constdouble 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 solverstd::cout<<"No real solution\n";returnEXIT_FAILURE;} for(auto[a, b, c]:{std::array{1,-3,2},{2,-3,-2},{1,2,3}}) show_quadratic_equation_solution(a, b, c); returnEXIT_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
saves the context (function macro)[edit] | |
jumps to specified location (function)[edit] | |
C documentation forjmp_buf |