函數(shù)名: setjmp
頭文件:<setjmp.h>
函數(shù)原型: int setjmp(jmp_buf env);
功 能: 非局部轉(zhuǎn)移進(jìn)程,設(shè)置緩沖區(qū)來保存系統(tǒng)堆棧的內(nèi)容
參數(shù): env jmp_buf結(jié)構(gòu)體變量,用于保存當(dāng)前的環(huán)境信息
返回值: 第一次直接調(diào)用,返回0;當(dāng)從longjmp函數(shù)返回時(shí),返回longjmp函數(shù)的第二個(gè)參數(shù)的值
程序例: 將當(dāng)前系統(tǒng)堆棧信息保存在變量buf中,為longjmp設(shè)置跳轉(zhuǎn)點(diǎn)
#include<stdio.h> #include<setjmp.h> #include<stdlib.h> void subroutine(void); jmp_buf jumper; int main(void){ int value = setjmp(jumper); //返回0 if (value != 0){ printf("Longjmp with value %d\n", value); exit(value); } printf("About to call subroutine ... \n"); subroutine(); return 0; } void subroutine(void){ longjmp(jumper,1); }
運(yùn)行結(jié)果
About to call subroutine ... Longjmp with value 1
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語(yǔ)法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程