std::jmp_buf

From cppreference.com
< cpp‎ | utility‎ | program
 
 
Utilities library
General utilities
Date and time
Function objects
Formatting library (C++20)
(C++11)
Relational operators (deprecated in C++20)
Integer comparison functions
(C++20)(C++20)(C++20)   
(C++20)
Swap and type operations
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Common vocabulary types
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
Elementary string conversions
(C++17)
(C++17)
 
Program support utilities
Program termination
(C++11)
(C++11)
Unreachable control flow
Communicating with the environment
Signals
Signal types
Non-local jumps
Types
jmp_buf
 
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

#include <csetjmp>
#include <iostream>
 
std::jmp_buf my_jump_buffer;
 
[[noreturn]] void foo(int status) 
{
    std::cout << "foo(" << status << ") called\n";
    std::longjmp(my_jump_buffer, status + 1); // setjmp() will return status + 1
}
 
int main()
{
    volatile int count = 0; // modified locals in setjmp scope must be volatile
    if (setjmp(my_jump_buffer) != 5) // equality against constant expression in an if
    {
        count += 1; // Increment of a volatile variable is deprecated since C++20 (P1152)
        foo(count); // This will cause setjmp() to exit
    }
}

Output:

foo(1) called
foo(2) called
foo(3) called
foo(4) called

See also

saves the context
(function macro)
jumps to specified location
(function)