首页 > 代码库 > setjmp()与longjmp()

setjmp()与longjmp()

setjmp()与longjmp() 和 函数与return有点类似
setjmp() : 直接调用时返回0,通过longjmp调用,返回longjmp指定的数值
longjmp():调用longjmp()运行的指针会跳到

例子
#include <stdio.h>  
#include <setjmp.h>  
   
static jmp_buf buf;  
   
void second(void) {  
    printf("second\n");         // 打印  
    longjmp(buf,1);             // 跳回setjmp的调用处 - 使得setjmp返回值为1  
}  
   
void first(void) {  
    second();  
    printf("first\n");          // 不可能执行到此行  
}  
   
int main() {     
    if ( ! setjmp(buf) ) {  
        first();                // 进入此行前,setjmp返回0  
    } else {                    // 当longjmp跳转回,setjmp返回1,因此进入此行 
        printf("main\n");       // 打印  
    }  
   
    return 0;  
}  

上述程序将输出:
second
main

参考:
http://zh.wikipedia.org/wiki/Setjmp.h

setjmp()与longjmp()