setjmp和logjmp是配合使用的,他们可以实现在不同函数间的跳转
- setjmp设置跳转点,第一次设置跳转点,返回值是0
- longjmp跳转到setjmp设置的跳转点之后, 再执行setjmp, 这时setjmp会返回1
看下面栗子:
#include <stdio.h>
#include <setjmp.h>
static jmp_buf buf;
void fun_sen() {
printf("fun_sen runs..\n");
longjmp(buf, 33);
}
void fun() {
printf("fun before runs..\n");
fun_sen();
printf("fun after runs..\n");
}
int main(void)
{
int i;
if (!setjmp(buf))
{
fun();
} else {
printf("main runs..\n");
}
return 0;
}
image.png
网友评论