内联与宏定义

来源:互联网 发布:陌陌站街软件下载 编辑:程序博客网 时间:2024/06/03 15:31

转自:http://www.cppblog.com/xczhang/archive/2008/01/09/40829.html

宏定义可以提高效率,但是宏不是函数。预编译通过代码复制的方式代替函数调用,省去了诸如函数压栈等系统过程,从而提高了效率。但是由于宏定义仅仅是代码替换,所以引起很多问题。

#define  MAX(a,b)  (a) > (b) ? ( a) : (b)
result=MAX(A,B) +2  编译器对其解释为 (a) > (b) ? (a) : (b)+2 .导致该语句执行与预期不符。
宏定义的另一个缺点就是无法访问类的私有成员

而内联函数通过把代码直接复制进调用函数体内,避免产生某些系统过程,同样提高了效率,但是内联函数可以进行类型检查,this指针同样能应用,这是宏定义无法比拟的。

内联函数必须是函数的声明和定义一体,且在函数前面加inline。


1、内联函数在可读性方面与函数是相同的,而在编译时是将函数直接嵌入调用程序的主体,省去了调用/返回指令,这样在运行时速度更快。
2、内联函数可以调试,而宏定义是不可以调试的。
内联函数与宏本质上是两个不同的概念如果程序编写者对于既要求快速,又要求可读的情况下,则应该将函数冠以inline。下面详细介绍一下探讨一下内联函数与宏定义。