Namespaces
Variants
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:

  1. The entire controlling expression of if, switch, while, do-while, for.
    switch(setjmp(env)) { // ...
  2. 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 if, switch, while, do-while, for.
    if(setjmp(env) > 10) { // ...
  3. The operand of a unary ! operator with the resulting expression being the entire controlling expression of if, switch, while, do-while, for.
    while(!setjmp(env)) { // ...
  4. The entire expression of an expression statement (possibly cast to void).
    setjmp(env);

If setjmp appears in any other context, the behavior is undefined.

Upon return to the scope of setjmp:

  • all accessible objects, floating-point status flags, and other components of the abstract machine have the same values as they had when longjmp was executed,
  • except for the non-volatile local variables in the function containing the invocation of setjmp, whose values are indeterminate if they have been changed since the setjmp invocation.

Contents