AVR Libc Home Page | AVR Libc Development Pages | |||
Main Page | User Manual | Reference | FAQ | Example Projects |
Functions |
|
int | setjmp (jmp_buf __jmpb) |
void | longjmp (jmp_buf __jmpb, int __ret) __ATTR_NORETURN__ |
While the C language has the dreaded goto
statement, it can only be used to jump to a label in the same (local) function. In order to jump directly to another (non-local) function, the C library provides the setjmp() and longjmp() functions. setjmp() and longjmp() are useful for dealing with errors and interrupts encountered in a low-level subroutine of a program.
For a very detailed discussion of setjmp()/longjmp(), see Chapter 7 of Advanced Programming in the UNIX Environment, by W. Richard Stevens.
Example:
#include <setjmp.h>jmp_buf env;
int main (void)
while (1) { ... main processing loop which calls foo() some where ... } }
...
void foo (void) { ... blah, blah, blah ...
if (err) { longjmp (env, 1); } }
void longjmp | ( | jmp_buf | __jmpb, |
int | __ret | ||
) |
Non-local jump to a saved stack context.
011#include <setjmp.h>longjmp() restores the environment saved by the last call of setjmp() with the corresponding __jmpb argument. After longjmp() is completed, program execution continues as if the corresponding call of setjmp() had just returned the value __ret.
__jmpb | Information saved by a previous call to setjmp(). |
__ret | Value to return to the caller of setjmp(). |
int setjmp | ( | jmp_buf | __jmpb | ) |
Save stack context for non-local goto.
011#include <setjmp.h>setjmp() saves the stack context/environment in __jmpb for later use by longjmp(). The stack context will be invalidated if the function which called setjmp() returns.
__jmpb | Variable of type jmp_buf which holds the stack information such that the environment can be restored. |