setjmp - cppreference.com

##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# setjmp

From cppreference.com
< c‎ | program

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

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

The invocation of `setjmp` must appear only in one of the following contexts, otherwise the behavior is undefined:

- the entire controlling expression of a selection or iteration statement
- one operand of a relational or equality operator with the other operand an integer constant expression, with the resulting expression being the entire controlling expression of a selection or iteration statement
- the operand of a unary ! operator with the resulting expression being the entire controlling expression of a selection or iteration statement
- the entire expression of an expression statement (possibly cast to `void`).

### [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 in the same as passed to longjmp.

### [edit] Example

Run this code

    #include <stdio.h>
    #include <setjmp.h>

    jmp_buf jump_buffer;

    void a(int count)
    {
        printf("a(%d) called\n", count);

        /* Restore calling environment. */
        longjmp(jump_buffer, count+1);  /* setjump() will return count+1 */
    }

    int main(void)
    {
        /* Save calling environment. */
        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=c/program/setjmp&oldid=69793"