带参宏定义推荐使用吗?

一些简单函数可以写成带参宏定义,代码看起来更短,宏定义用起来也很方便。
用带参宏定义和定义函数相比有什么优缺点呢?
感谢回答!

宏定义的优点是不占内存,它在编译阶段直接替换,然后就被编成机器码,没有形参实参的传递过程,执行效率更高,占内存更小,代码看起来也更简洁
缺点是不能写太复杂,一旦稍微复杂点很容易可读性变的非常差,而且忘记加括号就会出bug,想不出bug需要加很多括号,进一步造成可读性变差

带参宏相当于你直接把宏指代的代码直接写入你调用宏的位置,在汇编中不会涉及跳转;
函数是会涉及到跳转,入栈出栈等操作。
如果是对形参无特定形式要求,且形参数量较少、简单,建议使用宏
处理内容多,或者形参复杂,建议使用函数

该回答引用NewBing

带参宏定义和函数都可以用来实现相同的功能,但是它们有一些本质上的区别。带参宏定义仅仅是字符串的替换,不会对表达式进行计算,而函数是一段可以重复使用的代码,会被编译,会给它分配内存,每次调用函数,就是在运行时执行这段代码。因此,带参宏定义的优点在于代码看起来更短,宏定义用起来也很方便;而定义函数的优点在于可以重复使用这段代码,并且可以对参数进行类型检查等操作。(1)(2)


当然,带参宏定义也有一些缺点。首先,它只是字符串替换,不会对表达式进行计算,可能会导致一些意想不到的错误;其次,宏在编译之前就被处理掉了,它没有机会参与编译,也不会占用内存。(1)


总之,在选择使用带参宏定义和定义函数时,需要根据具体情况进行权衡和选择。如果只是简单的字符串替换,并且不需要对参数进行类型检查等操作,那么可以使用带参宏定义;如果需要重复使用这段代码,并且需要对参数进行类型检查等操作,那么应该使用函数。(1)(2)(3)


源: 与必应的对话, 2023/4/24

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^