# std::jmp_buf

From cppreference.com
< cpp‎ | utility‎ | program

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

Run this code

    #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

setjmp | saves the context (function macro)
longjmp | jumps to specified location (function)

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/program/jmp_buf&oldid=148741"