目录
c语言宏
在了解内联函数前,应先了解C语言的宏
在c语言中,宏是一种预处理指令,它可以在编译前被替换到调用处,从而实现类似于函数的功能。宏的定义使用 #define 指令
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int main()
{
int c=MAX(1,2);
//此时c=2
return 0;
}
在预处理阶段,会将宏定义的语句替换到到函数内部,因此需要注意加括号,确保不会出错
预处理后函数变为下边的函数
int main()
{
int c=((1) > (2) ? (1) : (2));
//此时c=2
return 0;
}
如上所示,我们在使用宏的过程中难免会出现错误,因此,在c++中,内联函数克服了宏的缺点
c++内联函数
内联函数是一种特殊的函数,它可以在编译时被替换到调用处,从而减少函数调用的开销。内联函数需要使用inline关键字
inline int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int c=max(1,2);//c=2
return 0;
}
当编译时,内联函数的代码会替换到调用语句处,如下
int main()
{
int c=(1 > 2 ? 1 : 2);//c=2
return 0;
}
内联函数与宏的比较
- 内联函数和宏都可以提高程序的执行效率。
- 内联函数是真正的函数,它有类型检查和作用域的限制,而宏只是文本替换,它没有类型检查和作用域的限制。
- 内联函数可以包含多条语句,而宏只能包含一条表达式。
- 内联函数可以递归调用,而宏不能递归调用。
- 内联函数可以被重载,而宏不能被重载。
- 内联函数可以被调试器识别,而宏不能被调试器识别。
总而言之内联函数和宏都是为了提高程序的性能而设计的,但是内联函数更安全和灵活,而宏更简单和直接