setjmp的跳转
Posted mered1th
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了setjmp的跳转相关的知识,希望对你有一定的参考价值。
** 问 :goto语句只能在函数内使用,那如果想要在函数内部直接跳到函数外怎么办呢?**
** 答:setjmp跳转
介绍:
- 举例:
#include<stdio.h>
#include<setjmp.h>
jmp_buf envbuf; //保存进程的上下文
void b() {
printf("I am b function.
");
longjmp(envbuf, 5); //回到setjmp的位置
}
void a() {
printf("before call b, I am a
");
b();
printf("after b finish, I am a
");
}
int main() {
int ret;
ret = setjmp(envbuf);
if (0 == ret) {
a();
}
return 0;
}
setjmp第一次调用返回值为0,进入if循环,调用a(),print出第一行,调用b,print第二行,再直接跳转到main函数ret的位置,此时ret置为5,再退出main函数。
以上是关于setjmp的跳转的主要内容,如果未能解决你的问题,请参考以下文章