renxianjing 发表于 2023-8-25 09:47:36

if和cond?

有部分语句可以通过if或者cond来实现。
那么两者之间有何差异呢?
我看好多大神的源码更偏好于使用cond,这是为啥呢?

baitang36 发表于 2023-8-25 20:46:24


(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:23

就像多选题和判断题。看你怎么选着。

renxianjing 发表于 2023-8-25 10:07:39

yaojing38 发表于 2023-8-25 10:00
就像多选题和判断题。看你怎么选着。

有没有效率方面的差异呢?

caoliu023 发表于 2023-8-25 10:30:10

没有必要纠结这个问题,有的时候and也是很好用的

烟盒迷唇 发表于 2023-8-25 10:30:29

if类型容易反编译吧

vitalgg 发表于 2023-8-25 11:50:17

都一样,到机器语言都是 条件跳转指令。

cond 可以实现 if.
(if test
expr-if
expr-else)
--------------------
(cond
(test expr-if)
(texpr-else))
=================

嵌套 if 也可以实现 cond .

renxianjing 发表于 2023-8-25 14:25:09

使用上来说,都可以实现。
我就是看大神们喜欢用cond、and之类的,所以问问

renxianjing 发表于 2023-8-26 19:10:21

baitang36 发表于 2023-8-25 20:46
(DEFUN T1 ()
(if (= A 1)
    (PRINC "1")


看不懂编译代码……
不过非常感谢您的解答!!!
似乎明白两者的差别了。非常感谢!

zhangcan0515 发表于 2023-8-27 22:09:08

用if写代码看着啰嗦,不简洁,后期不好维护,用cond代码阅读看着易懂,后期维护简单。
页: [1]
查看完整版本: if和cond?