C语言中goto的原理是指直接跳转到goto后面跟的那个Label的地址然后继续执行。
实现动态goto的方法呢就是将所有label事先存到一个地址数组中,然后根据程序运行过程中的中间结果进行判断去具体跳转到哪个位置。当然Label是在函数内有效,所以必须把这个数组定义到Label的函数内才能使用这种方法。
在标准C语言中是没有这个功能的,但是伟大的GCC为我们提供了这个功能。
GCC中"&&"操作符代表的含义是获得Label的地址,返回的数据类型是“void *”
#include <stdio.h>
int main()
{
int c = 1;
void *label_array[] =
{
&&op_hello,
&&op_world
};
scanf("%d", &c);
if (c < 0 || c > 1)
{
goto op_end;
}
goto *label_array[c];
op_hello:
printf("hello\n");
goto op_end;
op_world:
printf("world\n");
goto op_end;
op_end:
return 0;
}</stdio.h>
以上就是对应的代码。
编译执行后,运行
输入0,则打印"hello"
输入1,则打印"world"
具体的例子就放在上面了,应该能够帮助我后续回忆了。
使用这种技术有什么好处呢,更多的好处还没有想到,有一个好处就是可以代替switch,switch这个语句虽然用起来简便,但是性能还是比较一般的,即使在编译时能够使用2份查找,那么其复杂度也是O(log(n)),而对与这种goto方式效率是O(1)的。
对于像模拟器,虚拟机这样每条指令都需要解析执行的程序,这种技术还是会给程序带来不少的性能提升的。
相关推荐
C语言实现非法地址访问错误定位,可以准确定位错误发生的程序文件和位置,并保存到日志中。
c语言程序设计现代方法PPT课件.pptx
C语言程序设计现代方法(第2版)_课后习题答案
在《C语言程序设计现代方法第2版》的基础上添加了C1X的内容,测试了Cygwin3.3.4、VS2022和PellesC对C1X新特性的支持情况,暂未解答新增的第28章编程题第2题的多线程版。2022-3-13更新
C语言获取mac地址和IP地址的源代码,Linux系统下面。
笨办法学习C语言PDF文档,个人感觉挺好的,目前好没有看完
c语言 银行取号排队队列程序源码,不解释你懂的。
c语言程序设计现代方法第7章习题 c语言程序设计现代方法 c语言程序设计
C语言程序设计:现代方法_附录A_C语言语法.pdf
可以帮助C语言初学者迅速掌握C语言的基本编程方法,C语言快速入门。
c语言程序设计现代方法 c语言程序设计 c语言程序设计现代方法第8章习题
教材地址: http://download.csdn.net/source/2799218 http://download.csdn.net/source/2799234 http://download.csdn.net/source/2799250 相关资源: ppt课件: http://download.csdn.net/source/2418441 源代码...
在C语言中调用java语言的方法!对初学者很不错的实例!Android jni开发之C语言调用java语言
书中499道习题均已解答,注释详细(包含拓展知识、注意细节、Clion详细教程),2021年12月8日对编程题3-3进行了修正
c语言程序设计现代方法第5章习题 c语言程序设计现代方法 习题
C语言实现龙贝格方法 计算方法的实验题目 难度不小
今天在看到关于C语言运算符”&“的问题,因为之前自己学C语言时也遇到这个问题,就整理一下思路。
C语言程序设计现代方法附录及习题答案 清晰版
c语言实现mac地址合法性检测,成功返回1,失败返回0