inline函数c语言,c语言inline函数小结.doc

PAGE / NUMPAGES

//inline(内联)函数:将普通的函数定义为inline函数,可以避免普通函数入栈出栈的开销,它是将函数内的代码直接粘贴到调用处。除此之外,它和普通函数无异。

//要成为inline函数必须具备以下几点:

//1、函数代码很短,通过不超过10行

//2、函数内不能出现循环、递归、switch...case

//3、需要在编译的时候开启优化选项 -O

//否则加上inline修饰,编译器也会视而不见

//强制inline宏

#define __inline __attribute__((always_inline))

//inline放置的位置只要在函数的返回值的类型前面就可,如果函数又有static修饰,放在static的前后都可文档收集自网络,仅用于个人学习

//inline在不同编译器下放置的位置导致的结果是不同的,某些编译器如果将inline放在函数的声明的前面是不被视为inline函数的,但大部分编译器对放在函数声明和函数定义的前面视为一样文档收集自网络,仅用于个人学习

内联函数与宏的区别在于:宏是由预处理器来对宏进行替代,没有语法检查、类型检查和安全检查;内联函数是通过编译器的控制来实现的,有语法检查、类型检查和安全检查;内联函数是真正的函数,而且在调用的地方,由编译器负责把内联函数的函数体代码块替换到内联函数被调用的地方,这一点与宏替换很相似;内联函数有参数,有返回值;由于内联函数可以像宏一样被展开,所以调用内联函数的时候,取消了函数参数压栈、出栈所带来的开销,从而减少了函数调用开销;这就是内联函数的优越于宏的地方;文档收集自网络,仅用于个人学习

内联函数的声明和内联函数的函数体的定义必须在一起;下面声明内联函数的语句是无效的:inline int Max(int a, int b);文档收集自网络,仅用于个人学习

而下面的内联函数的定义是有效的:

inline int Max(int a, int b){return ((a > b) ? a : b)}; (c 语言声明)文档收集自网络,仅用于个人学习

C++类的成员函数也可以被定义为内联函数;比如:

class Student

{

private:

int nID

int nAge;

float fScore;

public:

void setID(int nid){ nID = nid; } //该成员函数默认自动为内联函数(隐式定义内联函数)文档收集自网络,仅用于个人学习

int getID(void){ return nID; } //该成员函数默认自动为内联函数(隐式定义内联函数)文档收集自网络,仅用于个人学习

inline void setAge(int nage) { nAge = nage; } //显式定义内联函数文档收集自网络,仅用于个人学习

inline int getAge(void) { return nAge; } //显式定义内联函数文档收集自网络,仅用于个人学习

void setScore(float fscore); //类定义体内没有声明为内联函数;文档收集自网络,仅用于个人学习

float getScore(void); //类定义体内没有声明为内联函数;文档收集自网络,仅用于个人学习

}

inline void Student::setScore(float fscore){ fScore = fscore; } //类定义体外实现为内联函数;文档收集自网络,仅用于个人学习

inline float Student::getScore(void) { return fScore; } //类定义体外实现为内联函数;文档收集自网络,仅用于个人学习

C++中,在类定义体内部定义了函数体的成员函数,被编译器默认为内联函数,而不管这个函数头前面是否有关键字inline,比如:setID()、getID()、setAge()、getAge();也可以把实现在类定义体外部的成员函数定义为内联函数,这个时候在类定义体中只有成员函数头的声明,而其实现是在类定义体外部,比如:setScore()和getScore();文档收集自网络,仅用于个人学习

即便是可以把实现在类定义体外部的成员函数定义为内联函数,那该成员函数的实现也必须写在声明类定义体的哪个头文件(.h)中,不能违反规则;即:内联函数的定义和实现都必须在同一个头(.h)文件中;文档收集自网络,仅用于个人学习

内联函数的局限性:

1、由于内联函数与宏一样也是实现为代码替换,所以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值