#include <setjmp.h> int setjmp(jmp_buf env); void longjmp(jmp_buf env, int val);
setjmp()设置跳转点,参数env用于保存运行环境(估计主要是寄存器值);优化
setjmp()自己返回时,返回值为0,如果从longjmp()返回,longjmp()的参数val就是setjmp()的返回值;code
longjmp()跳转到参数env所设置的跳转点,参数val为setjmp()的返回值;class
因为setjmp()保存了寄存器值,因此保存在寄存器里的变量在从longjmp()返回后,会被恢复为保存时的值。这种状况多见于进行了程序优化的代码,将auto、register变量保存在寄存器里面。而global、static、volatile变量不会被恢复(也即不管怎么优化,这三类变量也不会保存到寄存器里);变量