您的位置:首页 > 财经 > 金融 > setjmp和longjmp函数使用

setjmp和longjmp函数使用

2024/12/23 9:02:46 来源:https://blog.csdn.net/wabil/article/details/140184627  浏览:    关键词:setjmp和longjmp函数使用

这里用最简单直接的描述:这两组函数是用于实现类似vscode全局的标签跳转功能,setjmp负责埋下标签,longjmp负责标签跳转。

#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>jmp_buf envbuf1;
jmp_buf envbuf2;void func_label1()
{int ret = setjmp(envbuf1);printf("func label1 ret:%d.\n",ret);
}void func_label2()
{int ret = setjmp(envbuf2);printf("func label2 ret:%d.\n",ret);
}void test1()
{printf("test1 called.\n");longjmp(envbuf1,100);printf("test1 never run here.\n");
}void test2()
{printf("test2 called.\n");longjmp(envbuf1,200);printf("test2 never run here.\n");
}void test3()
{printf("test3 called.\n");longjmp(envbuf1,300);printf("test3 never run here.\n");
}void test4()
{printf("test4 called.\n");longjmp(envbuf2,400);printf("test4 never run here.\n");
}void test5()
{printf("test5 called.\n");longjmp(envbuf2,500);printf("test5 never run here.\n");
}void main()
{printf("==========Start process======\n");func_label1();func_label2();test1();//label1test2();test3();test4();//label2test5();printf("==========End process======\n");
}

运行效果:

从这个运行结果可以清楚的看到两个标签的跳转效果!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com