longjmp


longjmp

Jump to a previously defined point in the program

 #include <setjmp.h> void longjmp ( jmp_buf environment , int returnval  ); 

The longjmp( ) function allows the program to jump to a point that was previously defined by calling the macro setjmp( ). Unlike the goto statement, the longjmp( ) call does not need to be within the same function as its destination. The use of setjmp( ) and longjmp( ) can make a program harder to read and maintain, but they are useful as a way to escape from function calls in case of errors.

The environment argument contains the processor and stack environment corresponding to the destination, and must be obtained from a prior setjmp( ) call. Its type, jmp_buf, is defined in setjmp.h.

The longjmp( ) function does not return. Instead, the program continues as if returning from the setjmp( ) call, except that the returnval argument passed to longjmp( ) appears as the return value of setjmp( ). This value allows the setjmp( ) caller to determine whether the initial setjmp( ) call has just returned, or whether a longjmp( ) call has occurred. setjmp( ) itself returns 0. If setjmp( ) appears to return any other value, then that point in the program was reached by calling longjmp( ). If the returnval argument in the longjmp( ) call is 0, it is replaced with 1 as the apparent return value after the corresponding setjmp( ) call. The longjmp( ) call must not occur after the function that called setjmp( ) returns. Furthermore, if any variables with automatic storage duration in the function that called setjmp( ) were modified after the setjmp( ) call (and were not declared as volatile), then their values after the longjmp( ) call are indeterminate.

Example

See the example for setjmp( ).

See Also

setjmp( )



C(c) In a Nutshell
C in a Nutshell (In a Nutshell (OReilly))
ISBN: 0596006977
EAN: 2147483647
Year: 2006
Pages: 473

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net