restore the environment saved by setjmp
#include <setjmp.h> void longjmp( jmp_buf env, int return_value );
The longjmp() function restores the environment saved by the most recent call to the setjmp() function with the corresponding env argument.
It's generally a bad idea to use longjmp() to jump out of an interrupt function or a signal handler (unless the signal was generated by the raise() function). |
After the longjmp() function restores the environment, program execution continues as if the corresponding call to setjmp() had just returned the value specified by return_value. If the value of return_value is 0, the value returned is 1.
#include <stdio.h> #include <setjmp.h> jmp_buf env; rtn() { printf( "about to longjmp\n" ); longjmp( env, 14 ); } void main() { int ret_val = 293; if( 0 == ( ret_val = setjmp( env ) ) ) { printf( "after setjmp %d\n", ret_val ); rtn(); printf( "back from rtn %d\n", ret_val ); } else { printf( "back from longjmp %d\n", ret_val ); } }
produces the following:
after setjmp 0 about to longjmp back from longjmp 14
ANSI
Safety: | |
---|---|
Interrupt handler | No |
Signal handler | Yes |
Thread | Yes |