明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 563|回复: 9

[基础] if和cond?

[复制链接]
发表于 2023-8-25 09:47 | 显示全部楼层 |阅读模式
有部分语句可以通过if或者cond来实现。
那么两者之间有何差异呢?
我看好多大神的源码更偏好于使用cond,这是为啥呢?
发表于 2023-8-25 20:46 | 显示全部楼层

(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 00  03 67 0E 00 00 00 09 03     2 5    g      
00000040   00 35 01 02 00 03 0A 57  00 00 00 00 03 05 00 32    5     W       2
00000050   02 35 02 04 00 03 67 0D  00 00 00 09 01 00 35 01    5    g       5
00000060   02 00 03 57 01 00 00 00  01 16
                                                              14 00 00 00 00 03      W            
00000070   05 00 32 01 35 02 04 00  03 68 23 00 00 00 03 05     2 5    h#     
00000080   00 32 02 35 02 04 00 03  68 06 00 00 00 01 57 09    2 5    h     W
00000090   00 00 00 0A 09 01 00 35  01 02 00 03 57 09 00 00          5    W   
000000A0   00 0A 09 03 00 35 01 02  00 03 16         

上面是t1,下面是t2
可以看出,if是用67指令实现的,cond是用68指令,代码长度差不多,效率是一样的。
67指令的知名度更高一点,被破解的可能性略高。
cond的两个68指令是嵌套的,略微复杂一点点。
两个if的67指令是各自独立的,条理更清晰,破解相对简单一点点。
回复 支持 1 反对 0

使用道具 举报

发表于 2023-8-25 10:00 | 显示全部楼层
就像多选题和判断题。看你怎么选着。
 楼主| 发表于 2023-8-25 10:07 | 显示全部楼层
yaojing38 发表于 2023-8-25 10:00
就像多选题和判断题。看你怎么选着。

有没有效率方面的差异呢?
发表于 2023-8-25 10:30 | 显示全部楼层
没有必要纠结这个问题,有的时候and也是很好用的
发表于 2023-8-25 10:30 | 显示全部楼层
if类型容易反编译吧
发表于 2023-8-25 11:50 | 显示全部楼层
都一样,到机器语言都是 条件跳转指令。

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

嵌套 if 也可以实现 cond .
 楼主| 发表于 2023-8-25 14:25 | 显示全部楼层
使用上来说,都可以实现。
我就是看大神们喜欢用cond、and之类的,所以问问
 楼主| 发表于 2023-8-26 19:10 | 显示全部楼层
baitang36 发表于 2023-8-25 20:46
(DEFUN T1 ()
  (if (= A 1)
    (PRINC "1")

看不懂编译代码……
不过非常感谢您的解答!!!
似乎明白两者的差别了。非常感谢!
发表于 2023-8-27 22:09 | 显示全部楼层
用if写代码看着啰嗦,不简洁,后期不好维护,用cond代码阅读看着易懂,后期维护简单。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 16:03 , Processed in 0.263146 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表