NewNew 发表于 2009-10-11 19:14:08

宏定义会增加程序大小吗

各位好!宏定义是否会增加程序大小?我记得是不会的,想确认一下!

albert_w 发表于 2009-10-11 19:20:15

不会,它就是个速记标志而已,纯文本层面

w418781840 发表于 2009-10-11 20:04:30

如果你的宏很大的话,还是会的。

aiyige 发表于 2009-10-11 20:11:05

编译的时候展开,所以不会增大,我认为

fjcqv 发表于 2009-10-11 20:12:06

宏定义不管大不大,都不会增加程序大小.
相当于替换

ilikemcu 发表于 2009-10-11 20:17:01

宏不会增大程序大小,但是会拖慢编译速度,当然如果你的PC够劲就感觉不出啥来,老爷机相对明显些。

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

qzf368 发表于 2009-10-13 15:17:08

肯定不会啊 宏定义就是替换 只是为了方便程序维护 不会增大的

rayingpx 发表于 2009-10-17 20:13:16

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

zchong 发表于 2009-10-17 20:24:37

看样子大家的关注点不太一样,楼上理解正确

fangmcu 发表于 2009-10-17 21:02:46

不会 宏定义就是代换!

hugeice 发表于 2009-10-17 21:35:12

如果宏包含很多代码,而这个宏又在很多地方用到,有时是会显著增大代码的!

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

kebaojun305 发表于 2009-10-17 21:35:36

不会,宏定义不会增加程序的大小

machao 发表于 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条指令了。那么到底哪个节省代码?

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

maomao2126 发表于 2009-10-18 08:42:10

学习了,多谢马老师的分析

majiae 发表于 2009-10-18 13:31:58

关于变量
#define D 20

INT8U CONST D=20;


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

fangmcu 发表于 2009-10-19 21:23:48

#define D 20
INT8U CONST D=20;
?? 不明白为什么20可以放到D里???

BB101 发表于 2009-10-24 10:28:55

平时觉得没什么的东西,还有这么多学问。
MARK!
页: [1]
查看完整版本: 宏定义会增加程序大小吗