inline内联函数
适用于:频繁调用的短小函数 (因为频繁调用会大量消耗栈空间)
特点:安全、提高效率、但以消耗空间为代价
用来代替c语言中 表达式形式 的宏定义
inline定义的类的内联函数,在使用时直接进行替换(像宏一样展开),没有了调用的开销(函数的压栈退栈),效率也很高。
#include <stdio.h>
//函数定义为inline即:内联函数
inline char* dbtest(int a)
{
return (i % 2 > 0) ? "奇" : "偶";
}
int main()
{
int i = 0;
for (i=1; i < 100; i++)
{
printf("i:%d 奇偶性:%s /n", i, dbtest(i)); //不调用dbtest函数,而是用函数体直接替换函数调用
}
}
调用 dbtest(i) 的地方都替换成了 (i%2>0)?“奇”:“偶”,这样就避免了频繁调用函数对栈内存重复开辟所带来的消耗。
内联函数和宏定义的区别
内联函数 | 宏定义 | |
---|---|---|
本质是函数,在编译的时候编译器会在调用内联函数的地方直接把函数体插入(可以省去函数压栈退栈的时间),提高效率 | 宏不是函数,只是在预编译阶段把宏名用宏体代替(简单的字符串替换) | |
在编译的时候会进行参数类型的检查 | 不检查 |