8. setjmp.h
頭文件setjmp用於控制底層調用和函數跳轉。
宏:
setjmp();
函數:
longjmp();
變量:
typedef jmp_buf
8.1. 變量和定義
變量jmp_buf是一個數組類型,用於存儲setjmp和longjmp信息。
8.2. setjmp
聲明:
int setjmp(jmp_buf environment);
存儲當前運行環境environment變量中。如果返回一個非零值,則表明longjmp到達了源碼中所運行到的位置。否則表明運行環境已被存儲。
8.3. longjmp
聲明:
void longjmp(jmp_buf environment, int value);
這個函數會使environment恢復調用setjmp時存儲的environment值。這個函數時程序掉轉到曾調用setjmp處,好像setjmp返回value變量的值一樣。變量value的值不回為0。如果傳的是0,就用1來代替。如果調用setjmp的函數已經運行終止了,則返回值是不確定的。
實例:
#include<setjmp.h>
#include<stdio.h>
void some_function(jmp_buf);
int main(void)
{
int value;
jmp_buf environment_buffer;
value=setjmp(environment_buffer);
if(value!=0)
{
printf("Reached this point from a longjmp with value=%d.\n",value);
exit(0);
}
printf("Calling function.\n");
some_function(environment_buffer);
return 0;
}
void some_function(jmp_buf env_buf)
{
longjmp(env_buf,5);
}
程序的輸出是:
Calling function.
Reached this point from a longjmp with value=5.
英文原文:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.8.html
原文作者:Eric Huss
中文譯者:柳驚鴻 Poechant
版權聲明:本文的原文版權歸Eric Huss所有,中文譯文版權歸Poechant所有。轉載請注明來自"柳大的CSDN博客":http://blog.csdn.net/poechant