宏与内联函数


转自:http://blog.chinaunix.net/u/17030/showart_101269.html
第一部分:宏
为何要使用宏呢?
由于函数的调用必需要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操做要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。所以,函数调用要有必定的时间和空间方面的开销,因而将影响其效率。
而宏只是在预处理的地方把代码展开,不须要额外的空间和时间方面的开销,因此调用一个宏比调用一个函数更有效率。
可是宏也有不少的不尽人意的地方。
一、宏不能访问对象的私有成员。
二、宏的定义很容易产生二意性。
咱们举个例子:
#define square(x) (x*x)
咱们用一个数字去调用它,square(5),这样看上去没有什么错误,结果返回25,是正确的,可是若是咱们用squre (5+5)去调用的话,咱们指望的结果是100,而宏的调用

相关文章
相关标签/搜索