搜索
bottom↓
回复: 16

宏定义会增加程序大小吗

[复制链接]

出0入0汤圆

发表于 2009-10-11 19:14:08 | 显示全部楼层 |阅读模式
各位好!宏定义是否会增加程序大小?我记得是不会的,想确认一下!

出0入42汤圆

发表于 2009-10-11 19:20:15 | 显示全部楼层
不会,它就是个速记标志而已,纯文本层面

出0入0汤圆

发表于 2009-10-11 20:04:30 | 显示全部楼层
如果你的宏很大的话,还是会的。

出0入0汤圆

发表于 2009-10-11 20:11:05 | 显示全部楼层
编译的时候展开,所以不会增大,我认为

出0入0汤圆

发表于 2009-10-11 20:12:06 | 显示全部楼层
宏定义不管大不大,都不会增加程序大小.
相当于替换

出0入50汤圆

发表于 2009-10-11 20:17:01 | 显示全部楼层
宏不会增大程序大小,但是会拖慢编译速度,当然如果你的PC够劲就感觉不出啥来,老爷机相对明显些。

宏在编译时就是不断判断替换程序代码中的相关部分,最大的好处是方便代码的编写修改和维护,呵呵,我的感觉。

出0入0汤圆

发表于 2009-10-13 15:17:08 | 显示全部楼层
肯定不会啊 宏定义就是替换 只是为了方便程序维护 不会增大的

出0入0汤圆

发表于 2009-10-17 20:13:16 | 显示全部楼层
想问问以上各位,宏定义及宏的使用与函数调用(或说是子程)有什么区别呢?宏的使用是以空间换时间,函数(子程序)是时间换空间。如此说来宏的定义及使用为什么不会影响程序的大小呢?当然像:#define uchar unsigned char这样的定义是不会影响的,但当宏的定义达到了相当于一个函数或子程序的规模时是有影响的。个人理解,不当之处请指正。

出0入31汤圆

发表于 2009-10-17 20:24:37 | 显示全部楼层
看样子大家的关注点不太一样,楼上理解正确

出0入8汤圆

发表于 2009-10-17 21:02:46 | 显示全部楼层
不会 宏定义就是代换!

出0入0汤圆

发表于 2009-10-17 21:35:12 | 显示全部楼层
如果宏包含很多代码,而这个宏又在很多地方用到,有时是会显著增大代码的!

宏替换增大代码相当于函数内联增大代码一样

出0入8汤圆

发表于 2009-10-17 21:35:36 | 显示全部楼层
不会,宏定义不会增加程序的大小

出0入0汤圆

发表于 2009-10-17 22:40:16 | 显示全部楼层
本身这个问题是没有意义的。关键是理解宏是什么,子程序(函数)是什么,以及什么情况用宏,什么情况用子程序。

首先必须了解宏与子程序的区别,假定在一段代码中有5处调用函数,还有5处调用宏,那么代码中子程序的代码只有一段,多了5个CALL和RET代码。而宏所代表的代码出现了(重复)了5遍,但不会有5处的CALL和RET代码。从这个角度讲,好象宏“增加”了代码长度,可是在实际中不是这样使用的。

子程序通常完成的功能比较复杂,通过1、2条指令并不能完成,而且还需要参数传递。而宏通常定义是1/2条指令就能完成的简单功能,不存在参数传递的问题。当然宏也可以设计成子程序,可是作为子程序就需要现场保护和恢复,另外还有CALL、RET的代码,这些附加的代码比宏本身的需要的代码要多时,这时作为子程序设计就没有意义了。

以上面例子看,如果重复使用的功能只需要2条指令完成,那么定义成宏为好。5次调用宏,产生的代码是10条。而设计成子程序的话,这个子程序本身就不只2条指令(现场保护恢复等,参数传递等),而且5次调用有5个CALL和RET,就已经是10条指令了。那么到底哪个节省代码?

因此,这个问题应该是,什么情况下使用宏,什么情况使用子程序,总的程序代码才能最小?我想答案我在上面已经给出了。

出0入0汤圆

发表于 2009-10-18 08:42:10 | 显示全部楼层
学习了,多谢马老师的分析

出0入0汤圆

发表于 2009-10-18 13:31:58 | 显示全部楼层
关于变量
#define D 20

INT8U CONST D=20;


细讲起来,在程序里还是对代码大小有影响的。。。

出0入8汤圆

发表于 2009-10-19 21:23:48 | 显示全部楼层
#define D 20
INT8U CONST D=20;
?? 不明白为什么20可以放到D里???

出0入0汤圆

发表于 2009-10-24 10:28:55 | 显示全部楼层
平时觉得没什么的东西,还有这么多学问。
MARK!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 21:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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