内联函数
内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调试,在编译的时候内联函数可以直接被镶嵌到目标代码中去。而宏只是简单的替换。
内联函数有参数的类型检查,而宏没有类型检查。
inline是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。对于短小的代码来说,inline增加空间消耗换来的是效率提高,这方面和宏是一模一样的,但是inline在和宏相比没有付出任何额外代价的情况下更安全,至于是否要内联函数,就需要根据实际情况来看了,内联只是一个建议。
inline一般只用于如下情况:
- 一个函数被不断的调用
- 函数只有简单的几行,且函数中不包含for,while,switch语句
注意:关键字inline必须与函数定义体放在一起才能是函数称为内联,仅仅将inline放在函数声明前不起作用。
例如:
inline void fun(int x,int y); //这样是不能将fun函数定义为内联函数的
void fun(int a,int b)
{
return a>b;
}
应该改为
void fun(int x,int y);
inline void fun(int a,int b)
{
return a>b;
}
内联函数是以代码膨胀为代价的(空间换时间),仅仅省去了函数调用的开销,从而提高函数的执行效率。如果执行函数体内代码的时间相比于函数调用的开销大,那么效率的收获会很少。另外每一处内联函数的调用都要复制代码,将是程序的总代码量增大,消耗更多的内存空间。
宏
宏在c语言里极为重要,在C++中就少用的多了。关于宏的第一规则是绝不应该去使用,除非你不得不这样做。
宏是在代码处不加任何验证(无类型检查)的简单替换,而内联函数是将代码直接插入到调用处,而减少了普通函数的调用时的资源消耗。
宏不是函数,只是在预处理阶段将程序中有些关键字替换成宏体