goto语句的升级版,setjmp,longjmp
我们知道goto语句是不能跳过函数的,但是在我么C语言的应用中,在不使用汇编的情况下,遇到需要跳出深层循环比如检错机制的时候,有确实想要跨函数跳转,有没有上面办法可以做到呢?
这就是今天要讲的两个库函数,setjmp和longjmp.
先看例子:
#include<stdio.h> #include<setjmp.h> void test(void); jmp_buf restart; int main(void) { int num, value; int i = 0; value = setjmp(restart);//不管调用多少次,value都为0(只要没调用longjmp函数) while (value == 1) { i++; printf("test success\n"); if (i > 10) { i = 0; value = 0; } } while (1) { printf("输入数字 1 打印right,输入数字 2 ,模拟错误信息,观察打印信息\n"); scanf("%d", &num); switch (num) { case 1:printf("right\n"); num = 0; break; case 2:printf("err\n"); num = 0; test(); break; } } return 0; } void test(void) { int num; printf("输入数字 1 测试跳转\n"); scanf("%d", &num); if (num == 1) longjmp(restart, 1); }
通过上面的测试代码和输出数据,我们可以看到longjmp跳转实现了跨函数,而goto语句是做不到的.
更多细节待续。。。
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并获取更多隐藏干货,QQ交流群:816747642 微信公众号:Crystal软件学堂
![](https://images.cnblogs.com/cnblogs_com/yangguang-it/1907263/o_201227061707QQ20201227141844.png)
![](https://images.cnblogs.com/cnblogs_com/yangguang-it/1704156/o_200415115115qrcode_for_gh_5c7d1da35871_258.jpg)
作者:Crystal软件学堂 bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |