一些简单函数可以写成带参宏定义,代码看起来更短,宏定义用起来也很方便。
用带参宏定义和定义函数相比有什么优缺点呢?
感谢回答!
宏定义的优点是不占内存,它在编译阶段直接替换,然后就被编成机器码,没有形参实参的传递过程,执行效率更高,占内存更小,代码看起来也更简洁
缺点是不能写太复杂,一旦稍微复杂点很容易可读性变的非常差,而且忘记加括号就会出bug,想不出bug需要加很多括号,进一步造成可读性变差
带参宏相当于你直接把宏指代的代码直接写入你调用宏的位置,在汇编中不会涉及跳转;
函数是会涉及到跳转,入栈出栈等操作。
如果是对形参无特定形式要求,且形参数量较少、简单,建议使用宏
处理内容多,或者形参复杂,建议使用函数
该回答引用NewBing
带参宏定义和函数都可以用来实现相同的功能,但是它们有一些本质上的区别。带参宏定义仅仅是字符串的替换,不会对表达式进行计算,而函数是一段可以重复使用的代码,会被编译,会给它分配内存,每次调用函数,就是在运行时执行这段代码。因此,带参宏定义的优点在于代码看起来更短,宏定义用起来也很方便;而定义函数的优点在于可以重复使用这段代码,并且可以对参数进行类型检查等操作。(1)(2)
当然,带参宏定义也有一些缺点。首先,它只是字符串替换,不会对表达式进行计算,可能会导致一些意想不到的错误;其次,宏在编译之前就被处理掉了,它没有机会参与编译,也不会占用内存。(1)
总之,在选择使用带参宏定义和定义函数时,需要根据具体情况进行权衡和选择。如果只是简单的字符串替换,并且不需要对参数进行类型检查等操作,那么可以使用带参宏定义;如果需要重复使用这段代码,并且需要对参数进行类型检查等操作,那么应该使用函数。(1)(2)(3)
源: 与必应的对话, 2023/4/24
(1) C语言带参宏定义和函数的区别 - C语言中文网. http://c.biancheng.net/view/1983.html.
(2) 论述含参数的宏与函数的优缺点 - CSDN博客. https://blog.csdn.net/leikun153/article/details/81532229.
(3) 带参数的宏定义、函数与内联函数_含参数的宏与函数的优缺点以及应用场合_庸人俗话的博客-CSDN博客. https://blog.csdn.net/yjg00/article/details/109413019.
最后,特别感谢郝斌老师