标签:宏和函数的区别
宏与函数的区别:
1、宏做的是简单的字符串替换,不受类型限制;而函数是参数的传递,受到参数类型的限制。
2、宏体替换宏名是在编译之前就完成的,函数参数的调用是在函数执行时将实参传给形参的。
3、宏参数的替换是不经过计算的,有可能会带有副作用,所以我们在写宏体的时候一般在能加括号的地方都不要吝啬括号,但有时候这也不能解决副作用的问题。函数在传参时传的是值,不会产生副作用。
#define MAX (a,b) ((a)>(b)?(a):(b)) int main() { int a = 10; int b = 20; int ret = MAX (a++, b++); printf( "%d %d %d\n" , a, b, ret); system( "pause"); return 0; }
结果是: 11 22 21
这就是由宏所带的副作用造成的,因为宏进行的是字符串的替换,替换后的式子是:((a++)>(b++)?(a++):(b++))。如果是函数,则传递的是值,就不会产生副作用。
4、因为函数是在执行期间调用的,所以可以进行调试;宏在编译前完成的,所以不可以进行调试。
5、函数支持递归,宏不支持。
6、函数在调用时会产生时间和空间上的开销;宏在调用时则没有,因为宏进行的只是简单的字符串替换。
7、如果使用宏比较多,宏体在展开时会产生大量的代码,大大降低运行时间。
本文出自 “11132019” 博客,请务必保留此出处http://11142019.blog.51cto.com/11132019/1760935
标签:宏和函数的区别
原文地址:http://11142019.blog.51cto.com/11132019/1760935