宏只是字符的替换,在预处理阶段就被替换到代码中去了,而函数则是需要分配栈空间,在执行函数时都要进行入栈和出栈操作,有的还需要分配堆空间。宏所实现的功能有限,而且长代码不易读,但是对于逻辑简单,代码不长的,经常使用的功能由宏定义是个不错的选择。此外,函数调用会带来额外的开销,他需要开辟一片栈空间,记录返回地址,将形参压栈,从函数返回还要释放堆栈,这种开销不仅会降低代码效率,而且代码量也会大大增加,而使用宏定义则在代码规模和速度方面都比函数更胜一筹;其次,函数的参数必须被声明为一种特定的类型,所以它只能在类型合适的表达式时试用,我们如果要比较两个浮点型的大小,就不得不再写一个专门针对浮点型的比较函数。反之,上面的宏定义可以用于×××,长×××,单浮点型,双浮点型以及其他任何可以用“>”操作符比较值大小的类型,也就是说,宏是与类型无关的。 和使用函数相比,使用宏的不利之处在于每次使用宏时,一份宏定义代码的拷贝都会插入到程序中,除非宏非常短,否则使用宏会大幅度增长程序的长度。 还有一些任务根本无法用函数实现,但是用宏定义却很好实现。比如参数类型没法作为参数传递给函数,但是可以把参数类型传递给带参的宏。
宏和函数的简单比较
原创
©著作权归作者所有:来自51CTO博客作者张丹CTO的原创作品,如需转载,请与作者联系,否则将追究法律责任

提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
宏函数比普通函数效率高
总结一句话:一般情况下,普通函数调用有调用过程的开销,而宏函数是直接替换没\
编程语言 c++ 宏 函数 宏定义