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

Contents

[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 */
}

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

jumps to specified location
(function)
C++ documentation for setjmp