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
时间: 2024-10-09 07:49:01