宏和函数的比较以及程序翻译总结(一)
宏和函数的不同就以以下两个例子进行说明:
宏函数:#define MAX(a,b) ((a)>(b)?(a):(b))
普通函数:MAX(a,b) {return a>b?a:b}
可以看出,宏和函数有明显的不同:
1.宏做的是简单的字符串的替换,而函数是参数的传递,参数是有数据类型的。
2.宏的参数替换是直接替换的,不经任何计算,而函数调用时将形参的值传给形参。
3.宏在编译之前进行(先用宏体替换宏名,再进行编译),而函数是在编译之后执行时才调用的。
4.宏的参数是不占内存空间的,因为只做字符串的替换,而函数调用时参数之间的传递,所以占用内存。
5.函数调用需要空间开销,因为在函数调用时它既要保存现场又要跳转到另一个函数调用中去执行,然后还要返回现场,但宏函数中就不存在。
6.宏与类型无关,可以使用于任何参数类型;而函数参数如果类型不同,就需要使用不同的函数。
7.宏参数的求值需要考虑临近操作符的优先级,因此需要给他们加上括号;而函数参数只在函数调用时求值一次,将结果值传递给函数。因此表达式的求值结果更容易预测。
程序环境和预处理总结