宏定义会增加程序大小吗
各位好!宏定义是否会增加程序大小?我记得是不会的,想确认一下! 不会,它就是个速记标志而已,纯文本层面 如果你的宏很大的话,还是会的。 编译的时候展开,所以不会增大,我认为 宏定义不管大不大,都不会增加程序大小.相当于替换 宏不会增大程序大小,但是会拖慢编译速度,当然如果你的PC够劲就感觉不出啥来,老爷机相对明显些。
宏在编译时就是不断判断替换程序代码中的相关部分,最大的好处是方便代码的编写修改和维护,呵呵,我的感觉。 肯定不会啊 宏定义就是替换 只是为了方便程序维护 不会增大的 想问问以上各位,宏定义及宏的使用与函数调用(或说是子程)有什么区别呢?宏的使用是以空间换时间,函数(子程序)是时间换空间。如此说来宏的定义及使用为什么不会影响程序的大小呢?当然像:#define uchar unsigned char这样的定义是不会影响的,但当宏的定义达到了相当于一个函数或子程序的规模时是有影响的。个人理解,不当之处请指正。 看样子大家的关注点不太一样,楼上理解正确 不会 宏定义就是代换! 如果宏包含很多代码,而这个宏又在很多地方用到,有时是会显著增大代码的!
宏替换增大代码相当于函数内联增大代码一样 不会,宏定义不会增加程序的大小 本身这个问题是没有意义的。关键是理解宏是什么,子程序(函数)是什么,以及什么情况用宏,什么情况用子程序。
首先必须了解宏与子程序的区别,假定在一段代码中有5处调用函数,还有5处调用宏,那么代码中子程序的代码只有一段,多了5个CALL和RET代码。而宏所代表的代码出现了(重复)了5遍,但不会有5处的CALL和RET代码。从这个角度讲,好象宏“增加”了代码长度,可是在实际中不是这样使用的。
子程序通常完成的功能比较复杂,通过1、2条指令并不能完成,而且还需要参数传递。而宏通常定义是1/2条指令就能完成的简单功能,不存在参数传递的问题。当然宏也可以设计成子程序,可是作为子程序就需要现场保护和恢复,另外还有CALL、RET的代码,这些附加的代码比宏本身的需要的代码要多时,这时作为子程序设计就没有意义了。
以上面例子看,如果重复使用的功能只需要2条指令完成,那么定义成宏为好。5次调用宏,产生的代码是10条。而设计成子程序的话,这个子程序本身就不只2条指令(现场保护恢复等,参数传递等),而且5次调用有5个CALL和RET,就已经是10条指令了。那么到底哪个节省代码?
因此,这个问题应该是,什么情况下使用宏,什么情况使用子程序,总的程序代码才能最小?我想答案我在上面已经给出了。 学习了,多谢马老师的分析 关于变量
#define D 20
INT8U CONST D=20;
细讲起来,在程序里还是对代码大小有影响的。。。 #define D 20
INT8U CONST D=20;
?? 不明白为什么20可以放到D里??? 平时觉得没什么的东西,还有这么多学问。
MARK!
页:
[1]