您的位置:首页 > 其它

内联函数

2016-03-13 22:00 141 查看
//宏定义函数 
#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.函数内联声明必须在语句调用之前

优点只是节省了压栈,跳转,返回的时间
不建议庞大的函数作为内联函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: