[C] C语言的setjmp和longjmp
2016-03-03 本文已影响69人
何幻
(1)setjmp和longjmp
setjmp(jmp_buf j)
必须首先被调用。它表示“使用变量j记录现在的位置,函数返回零”。
longjmp(jmp_buf j, int i)
可以接着被调用。它表示“回到j所记录的位置,让它看上去像是从原先的setjmp()
函数返回一样。但是函数返回i
,使代码能够知道它是实际上通过longjmp()
返回的。”
(2)示例
#include <setjmp.h>
jump_buf buf;
#include <setjmp.h>
banana(){
printf("in banana() \n");
longjmp(buf,1);
/* 以下代码不会被执行 */
printf("you'll never see this, because i longjmp'd");
}
main (){
if(setjmp(buf)){
printf("back in main\n");
}else{
printf("first time through\n");
banana();
}
}
输出结果如下:
first time through
in banana()
back in main
注:
(1)以上例子出自《C专家编程》P128。
(2)setjmp
和longjmp
的概念类似于call/cc
。