< 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.


[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

#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 */


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

jumps to specified location
(function) [edit]