内联函数

//宏定义函数 
#define func1(a,b) (a>b?a:b)这种宏定义方法是直接代码替换方式的

/*内联函数*/
inline int func(int a,int b)
{
    return a>b?a:b;
}

内联函数类似于宏定义,在编译器中是没有函数声明的,是将函数体直接插入调用的地方,没有标准开销,但是不是说所有函数都是可以转化为内联函数的,编译过程中这是请求当做内联函数,如果请求失败的话会直接转化为普通函数处理。

内联函数本质还是函数,类型检查,返回值也会检查,只是没有调用时的参数入栈的开销,但是并不是宏,宏代码是预编译器处理的,但是内联函数是编译器处理的,其实内敛函数和宏的效率是一样的,但是比宏更加安全!


/*强制内联请求*/
inline int func2(int a,int b) __attribute__((always_inline));

inline int func2(int a,int b)
{
    return a>b?a:b;
}
强制函数是g++编译器的一种扩展,是强制编译器使用内联函数编译方法。

内联函数的编译限制:
1.不能存在任何形式的循环语句
2.不能存在过多的条件判断语句,switch是不支持的
3.函数体不能够很大,一般不会超过5句
4.不能进行取址操作
5.函数内联声明必须在语句调用之前

优点只是节省了压栈,跳转,返回的时间
不建议庞大的函数作为内联函数







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值