先把宏和内联函数的例子搬上来:
#define square(x) (x*x)
inline int square(int x)
{
return x*x;
}
先直接上结论:
共同点:由于每次函数调用会有一定的时间和空间开销,如果程序里需要频繁调用某个函数,这样就会带来大量开销,宏和内联函数可以直接替换程序中的函数调用,从而减少开销。
不同点:宏的本质是机械性的替换不具备函数的一些性质(比如说参数的值传递),它是由预处理器来完成,没有类型检查,会带来二义性。而内联函数是由编译器来控制实现的,显得更加高级,不容易出错。
下面来看看几个调用例子: