#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() {
int res;
int count=0;
while(1){
res = setjmp(buf);
count++;
printf("res:%d\n",res);
if(count == 8)
{
break;
}
}
if (!(res)) {
first(); // 进入此行前,setjmp返回0
} else { // 当longjmp跳转回,setjmp返回1,因此进入此行
printf("main\n"); // 打印
}
return 0;
}
setjmp和longjmp使用案例
最新推荐文章于 2023-05-17 16:09:14 发布