]给AutoLisp语言增加goto指令
感谢baitang36写的这个帖子[原创]给AutoLisp语言增加goto指令为我带来灵感,为此编写了该工具。
发了【首发】定义真正意义的可选参数(附带防反编译技术)之后发现懂的人自然懂,不懂的做再多解释也没用,而且适用的人群也不多,所以关于goto的实际应用不做过多的解释,下面直接看例子。
<ignore_js_op>
(defun c:t1 ();跳转测试
(setq a 1122334400 sss 1 );goto 1
(princ 11111111)
(setq a 1122334401 sss 1 );end 1
(princ 2222)(princ)
)
(defun c:t2()
(setq i 0)
(repeat 10000;跳过循环
(setq i(1+ i))
(if (> i 5)(setq a 1122334400 a 2));goto 2
)
(setq a 1122334401 a 2);end 2
(princ "\ni的值为")(princ i)(princ)
)
(defun c:t3();没有循环语句的循环
(setq i 0)
(setq a 1122334401 a 3);end 3
(setq i(1+ i))
(if (< i 5)(setq a 1122334400 a 3));goto 3
(princ "\ni的值为")(princ i)
(princ)
)
编译成fas之后采用我写的这个工具处理,处理后加载运行,得出下面的结果
命令: t1
2222
命令: t2
i的值为6
命令: t3
i的值为5
对照原来的源码,你看出什么了吗?
下面介绍一下用法:
goto分为两步,一步是起跳,在源码里面用
(setq a 1122334400 1)
作为goto起跳标志,1122334400 是固定的,1是索引,指向终点标志,变量名随意,用什么都可以,工具会自动清除该句
(setq a 1122334401 1)
作为goto终点标志,1122334401 是固定的,1是索引,与起跳索引对应,变量名随意,用什么都可以,工具会自动清除句
goto跳转标志
1、1122334400起跳标志,后面跟着跳转终点索引,终点索引为短整数(取值范围为-127至正127区间)。
2、1122334401跳转终点标志,后面跟着终点索引,终点标示为短整数,与起跳标志对应。
3、一个终点可以对应多个起点,最多允许256个终点。
4、终点标志不允许重复。
5、跳转在任何地方跳转,可以跨函数,从一个函数跳到另外一个函数,再跳回来都可以(也可以选择不回来)