C標準庫參考指南譯文系列(8)setjmp.h

鍾超發表於2012-02-05

英文原文:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.8.html

原文作者:Eric Huss

中文譯者:柳驚鴻 Poechant

版權宣告:本文的原文版權歸Eric Huss所有,中文譯文版權歸Poechant所有。轉載請註明來自"柳大的CSDN部落格"http://blog.csdn.net/poechant


8. setjmp.h

標頭檔案setjmp用於控制底層呼叫和函式跳轉。

巨集:

setjmp();


函式:


longjmp();


變數:


typedef jmp_buf


8.1. 變數和定義

變數jmp_buf是一個陣列型別,用於儲存setjmplongjmp資訊。


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.


該系列譯文在持續更新中⋯⋯

C標準庫參考指南系列譯文(1)assert.h

C標準庫參考指南系列譯文(2)ctype.h

C標準庫參考指南系列譯文(3)errno.h

C標準庫參考指南系列譯文(4)float.h

C標準庫參考指南系列譯文(5)limits.h

C標準庫參考指南系列譯文(6)locale.h

C標準庫參考指南系列譯文(7)math.h

C標準庫參考指南系列譯文(8)setjmp.h

C標準庫參考指南系列譯文(9)signal.h

C標準庫參考指南系列譯文(10)stdarg.h

C標準庫參考指南系列譯文(11)stddef.h

C標準庫參考指南系列譯文(12)stdio.h(A)


版權宣告:本文的原文版權歸Eric Huss所有,中文譯文版權歸Poechant所有。轉載請註明來自"柳大的CSDN部落格"http://blog.csdn.net/poechant

-

相關文章