AVR Libc Home Page | AVR Libc Development Pages | ||||
Main Page | User Manual | Library Reference | FAQ | Alphabetical Index | Example Projects |
関数 | |
int | setjmp (jmp_buf __jmpb) |
void | longjmp (jmp_buf __jmpb, int __ret) __ATTR_NORETURN__ |
C言語には、恐れられたgoto
文がありますが、それは、同じ(ローカル)関数内のラベルにジャンプするために使うことが出来ます。別の(ローカル外の)関数に直接ジャンプするためには、Cライブラリは、setjmp() や longjmp()関数を提供しています。 setjmp() や longjmp() は、低レベルのサブルーチンプログラムにおいて、エラーや割込みが発生したときの処理に便利です。
setjmp()/longjmp()のとても詳しい議論は、W. Richard StevensによるAdvanced Programming in the UNIX Environmentの7章を参照してください。
例:
#include <setjmp.h> jmp_buf env; int main (void) { if (setjmp (env)) { ... handle error ... } 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 | ||
) |