#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變量不會被恢復(也即不管怎麼優化,這三類變量也不會保存到寄存器裏);變量