##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# setjmp

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

Defined in header `<csetjmp>` |  |
#define setjmp(env) /* implementation-defined */ |  |

Saves the current execution context into a variable `env` of type std::jmp_buf. This variable can later be used to restore the current execution context by std::longjmp function. That is, when a call to std::longjmp function is made, the execution continues at the particular call site that constructed the std::jmp_buf variable passed to std::longjmp. In that case setjmp returns the value passed to std::longjmp.

### [edit] Parameters

env | - | variable to save the execution state of the program to.

### [edit] Return value

​0​ if the macro was called by the original code and the execution context was saved to `env`.

Non-zero value if a non-local jump was just performed. The return value is the same as passed to std::longjmp.

### [edit] Example

Run this code

    #include <iostream>
    #include <csetjmp>

    std::jmp_buf jump_buffer;

    [[noreturn]] void a(int count)
    {
        std::cout << "a(" << count << ") called\n";
        std::longjmp(jump_buffer, count+1);  // setjump() will return count+1
    }

    int main()
    {
        int count = setjmp(jump_buffer);
        if (count != 9) {
            a(count);  // This will cause setjmp() to exit
        }
    }

Output:

    a(0) called
    a(1) called
    a(2) called
    a(3) called
    a(4) called
    a(5) called
    a(6) called
    a(7) called
    a(8) called

### [edit] See also

longjmp | jumps to specified location (function) [edit]
C documentation for setjmp

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/utility/program/setjmp&oldid=65597"