C語(yǔ)言 庫(kù)宏 setjmp()
C語(yǔ)言 庫(kù)宏 setjmp()
C 標(biāo)準(zhǔn)庫(kù) - <setjmp.h>
C 庫(kù)宏 int setjmp(jmp_buf environment) 把當(dāng)前環(huán)境保存在變量 environment 中,以便函數(shù) longjmp() 后續(xù)使用。如果這個(gè)宏直接從宏調(diào)用中返回,則它會(huì)返回零,但是如果它從 longjmp() 函數(shù)調(diào)用中返回,則它會(huì)返回一個(gè)傳給 longjmp 作為第二個(gè)參數(shù)的非零值。
1. 聲明
下面是 setjmp() 宏的聲明。
int setjmp(jmp_buf environment)
2. 參數(shù)
- environment -- 這是一個(gè)類(lèi)型為 jmp_buf 的用于存儲(chǔ)環(huán)境信息的對(duì)象。
3. 返回值
這個(gè)宏可能不只返回一次。第一次,在直接調(diào)用它時(shí),它總是返回零。當(dāng)調(diào)用 longjmp 時(shí)帶有設(shè)置的環(huán)境信息,這個(gè)宏會(huì)再次返回,此時(shí)它返回的值會(huì)傳給 longjmp 作為第二個(gè)參數(shù)。
4. 實(shí)例
下面的實(shí)例演示了 setjmp() 宏的用法。
#include <stdio.h> #include <stdlib.h> #include <setjmp.h> int main() { int val; jmp_buf env_buffer; /* 保存 longjmp 的調(diào)用環(huán)境 */ val = setjmp( env_buffer ); if( val != 0 ) { printf("從 longjmp() 返回值 = %s\n", val); exit(0); } printf("跳轉(zhuǎn)函數(shù)調(diào)用\n"); jmpfunction( env_buffer ); return(0); } void jmpfunction(jmp_buf env_buf) { longjmp(env_buf, "w3cschool.cn"); }
讓我們編譯并運(yùn)行上面的程序,這將產(chǎn)生以下結(jié)果:
跳轉(zhuǎn)函數(shù)調(diào)用 從 longjmp() 返回值 = w3cschool.cn
相關(guān)文章
- C++ 修飾符類(lèi)型
- C++ 數(shù)字
- C++ 繼承
- C++ 信號(hào)處理
- C語(yǔ)言 條件語(yǔ)句
- C語(yǔ)言 結(jié)構(gòu)體
- C語(yǔ)言 標(biāo)準(zhǔn)庫(kù) <stddef.h>
- C# 簡(jiǎn)介
- C# 字符串 String
- C# 類(lèi) Class
- C++ 傳遞指針給函數(shù)
- C++ 指向數(shù)組的指針
- C++ 拷貝構(gòu)造函數(shù)
- C++ 類(lèi)的靜態(tài)成員
- C++ 輸入輸出運(yùn)算符重載
- C++ 下標(biāo)運(yùn)算符 [] 重載
- C語(yǔ)言 庫(kù)函數(shù) difftime()
- C# 排序列表(SortedList)
- C# while 循環(huán)
- C# do…while 循環(huán)