一、内联函数inline
函数调用时都会产生一些额外的开销,主要是系统栈的保护、代码的传递、系统栈的恢复以及参数传递等。对于那些函数体很小、执行时间很短但又频繁使用的函数,定义为内联函数提高函数调用的效率。内联函数不是在调用时发生转移,而是在编译时将函数体嵌入到每个内联函数调用处。这样就省去了参数传递、系统栈的保护与恢复等的时间开销。
语法形式:<inline><类型标识符><被调函数名>(含类型说明的形参表)
{
函数体
}
注意:
1.内联函数以目标代码的增加为代价来换取时间的节省。
2.内联函数在编译时被替换。
3.内联函数一般不能含有循环语句和switch语句。
4.内联函数的定义必须出现在第一次被调用之前。
5.对内联函数不能进行异常接口说明。
如果违背了上述注意点中的任意一项,编译程序就会无视关键字inline的存在,像处理一般函数一样处理,不生成扩展代码。
二、#define
#define SQR(x) x*x
int main()
{
int a,k=3;
a=++SQR(k+1);
printf("%d\n",a);
}
打印出的结果:++k+1*k+1=4+4+1=9
注意:
1.在宏扩展时,只对宏名做简单的代换,不做任何计算,也不做任何语法检查。
2.宏由编译预处理程序处理。