if和cond?
有部分语句可以通过if或者cond来实现。那么两者之间有何差异呢?
我看好多大神的源码更偏好于使用cond,这是为啥呢?
(DEFUN T1 ()
(if (= A 1)
(PRINC "1")
)
(if (= A 2)
(PRINC "2")
)
)
(DEFUN T2 ()
(COND ((= A 1) (PRINC "1"))
((= A 2) (PRINC "2"))
)
)
编译后是这样的:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00000020 14 00 00 00 00 03
00000030 05 00 32 01 35 02 04 0003 67 0E 00 00 00 09 03 2 5 g
00000040 00 35 01 02 00 03 0A 5700 00 00 00 03 05 00 32 5 W 2
00000050 02 35 02 04 00 03 67 0D00 00 00 09 01 00 35 01 5 g 5
00000060 02 00 03 57 01 00 00 0001 16
14 00 00 00 00 03 W
00000070 05 00 32 01 35 02 04 0003 68 23 00 00 00 03 05 2 5 h#
00000080 00 32 02 35 02 04 00 0368 06 00 00 00 01 57 09 2 5 h W
00000090 00 00 00 0A 09 01 00 3501 02 00 03 57 09 00 00 5 W
000000A0 00 0A 09 03 00 35 01 0200 03 16
上面是t1,下面是t2
可以看出,if是用67指令实现的,cond是用68指令,代码长度差不多,效率是一样的。
67指令的知名度更高一点,被破解的可能性略高。
cond的两个68指令是嵌套的,略微复杂一点点。
两个if的67指令是各自独立的,条理更清晰,破解相对简单一点点。
就像多选题和判断题。看你怎么选着。 yaojing38 发表于 2023-8-25 10:00
就像多选题和判断题。看你怎么选着。
有没有效率方面的差异呢? 没有必要纠结这个问题,有的时候and也是很好用的 if类型容易反编译吧 都一样,到机器语言都是 条件跳转指令。
cond 可以实现 if.
(if test
expr-if
expr-else)
--------------------
(cond
(test expr-if)
(texpr-else))
=================
嵌套 if 也可以实现 cond . 使用上来说,都可以实现。
我就是看大神们喜欢用cond、and之类的,所以问问 baitang36 发表于 2023-8-25 20:46
(DEFUN T1 ()
(if (= A 1)
(PRINC "1")
看不懂编译代码……
不过非常感谢您的解答!!!
似乎明白两者的差别了。非常感谢! 用if写代码看着啰嗦,不简洁,后期不好维护,用cond代码阅读看着易懂,后期维护简单。
页:
[1]