有时候解决一个问题会有很多种方法,宏和函数就是一个很好的例子。但是二者到底谁更胜一筹呢?我们来对比一下。
属性 |
#define 宏 |
函数 |
代码长度 |
每次使用时,宏代码都被插入到程序中,除非是很小的宏,否则程序的代码将大幅度增长 |
函数代码只出现在一个地方,每次使用这个函数时,都调用那个地方的同一个代码 |
执行速度 |
更快 |
存在函数调用,返回的时间消耗 |
操作符优先级 |
宏参数的求值是在上下文环境中的,因此临近的操作符优先级可能会产生不可预料的结果(所以在使用宏时要尽可能适当的多加括号) |
函数参数只在函数调用时求值一次,它的结果值传递给函数。表达式的求值结果更容易预测 |
参数求值 |
参数每次用于宏定义时,它们都将重新求值。 |
参数在函数被调用时求值一次 |
参数类型 |
参数类型:宏的求值与类型无关 |
函数的参数是与类型有关的,因此如果参数的类型不同,就需要使用不同的函数 |
其他 |
宏不能递归,不能进行调试,可以传递类型
宏名全部大写
|
函数可以递归,可以进行调试,不可以传递类型
函数名不要全部大写 |