博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
goto语句的升级版,setjmp,longjmp
阅读量:7026 次
发布时间:2019-06-28

本文共 924 字,大约阅读时间需要 3 分钟。

我们知道goto语句是不能跳过函数的,但是在我么C语言的应用中,在不使用汇编的情况下,遇到需要跳出深层循环比如检错机制的时候,有确实想要跨函数跳转,有没有上面办法可以做到呢?

这就是今天要讲的两个库函数,setjmp和longjmp.

先看例子:

#include
#include
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语句是做不到的.

更多细节待续。。。

转载地址:http://txoxl.baihongyu.com/

你可能感兴趣的文章
Linux学习笔记3——常规命令与文件管理命令
查看>>
第三关练习题 权限
查看>>
UIWebView支持跨域,WKWebView不支持!
查看>>
12月个人指标
查看>>
在spring中获取代理对象代理的目标对象工具类
查看>>
CountDownLatch和CyclicBarrier模拟同时并发请求
查看>>
Fedora 30接近最终版,但仍存在一些bug
查看>>
IOS开发--循环引用问题,普通控件为什么用weak,代理为什么用weak,block内用到外面的东...
查看>>
Java初学者怎么学习才能快速入门?
查看>>
AJPFX对选择和冒泡两种排序的理解
查看>>
磁盘管理之MBR
查看>>
Linux系统管理(一)
查看>>
鼠标悬停整行变色
查看>>
我的友情链接
查看>>
活动目录数据库
查看>>
java中标签的作用
查看>>
安装maven及eclipse中安装maven插件
查看>>
Eclipse去除js(JavaScript)文件上的小红叉
查看>>
AngularJS—— 指令的交互
查看>>
Nginx + tomcat + Memcached(session共享)
查看>>