C语言带参数的宏和函数的区别

带参数的宏和函数的区别中有一条是形参和实参的作用不同,可以详细解答吗?

宏是直接展开替换,而函数是传递参数,有形参和实参

这篇文章讲解的比较详细。http://c.biancheng.net/cpp/html/2929.html

 比如
int mul(int x, int y)
{
return x * y;
}
和
define mul(x, y) x *y
对于
mul(2+3, 4 + 5);
如果是函数,结果是(2+3)*(4+5)=45
如果是宏,结果是2+3*4+5=19

我个人觉得就是看场合来用的。比如说如果在一个函数反复调用的场合,利用宏定义函数来执行的效率会更快。因为反复的利用,普通函数需要传参,函数的传参就是把参数复制一次进函数利用的,所以反复利用的时候效率并不高,反复的利用栈,而宏定义就是直接的利用参数计算。但是宏定义小心的添加括号,使得它按照你的正常的执行顺序。