内联函数和宏
1. 内联函数和宏: 内联扩展是用来消除函数调用时的时间开销。它通常用于频繁执行的函数。一个小内存空间的函数非常受益。那么内联函数和宏之间有什么关系呢?? 实际上,内联函数的功能和预处理宏的功能相似。我们会经常定义一些宏,如 #define TABLE_COMP(x) ((x)>0?(x):0)这就定义了一个宏。看看为什么要使用宏?因为函数的调用必须要将程序执行的顺序转移到函数所存放在内存中的某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去执行前要保存现场并记忆执行的地址,转回后要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。而宏只是在预处理的地方把代码展开,不需要额外的空间和时间方面的开销,所以调用一个宏比调用一个函数更有效率。这些和内联函数的优点是一样的哦! 但是宏也有很多的不尽人意的地方。 1.宏不能访问对象的私有成员。 2.宏的定义很容易产生二意性。 举个例子: #define TABLE_MULTI(x) (x*x) 我们用一个数字去调用它,TABLE_MULTI(10),这样看上去没有什么错误,结果返回100,是正确的,但是如果我们用TABLE_MULTI(10+10)去调用的话,我们期望的结果是400,而宏的调用结果是(10+10*10+10),结果是120