setjmp
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:
- the entire controlling expression of a selection or iteration statement (if, switch, for, while, do-while)
switch(setjmp(env)) { ..
- 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
if(setjmp(env) > 10) { ...
- the operand of a unary ! operator with the resulting expression being the entire controlling expression of a selection or iteration statement
while(!setjmp(env)) { ...
- 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 setjmp's scope, whose values are indeterminate if they have been changed since the setjmp invocation.
Parameters
env | - | variable to save the execution state of the program to. |
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.