C语言inline函数小结.doc

C语言inline函数小结.doc

ID:51300474

大小:35.52 KB

页数:2页

时间:2020-03-10

C语言inline函数小结.doc_第1页
C语言inline函数小结.doc_第2页
资源描述:

《C语言inline函数小结.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、//inline(内联)函数:将普通的函数定义为inline函数,可以避免普通函数入栈出栈的开销,它是将函数内的代码直接粘贴到调用处。除此之外,它和普通函数无异。//要成为inline函数必须具备以下几点://1、函数代码很短,通过不超过10行//2、函数内不能出现循环、递归、switch...case//3、需要在编译的时候开启优化选项-O//否则加上inline修饰,编译器也会视而不见//强制inline宏#define__inline__attribute__((always_inline))//inline放置的位置只要在函数的返回值的类型前面就可,如果函数又有stati

2、c修饰,放在static的前后都可//inline在不同编译器下放置的位置导致的结果是不同的,某些编译器如果将inline放在函数的声明的前面是不被视为inline函数的,但大部分编译器对放在函数声明和函数定义的前面视为一样内联函数与宏的区别在于:宏是由预处理器来对宏进行替代,没有语法检查、类型检查和安全检查;内联函数是通过编译器的控制来实现的,有语法检查、类型检查和安全检查;内联函数是真正的函数,而且在调用的地方,由编译器负责把内联函数的函数体代码块替换到内联函数被调用的地方,这一点与宏替换很相似;内联函数有参数,有返回值;由于内联函数可以像宏一样被展开,所以调用内联函数的时候

3、,取消了函数参数压栈、出栈所带来的开销,从而减少了函数调用开销;这就是内联函数的优越于宏的地方;内联函数的声明和内联函数的函数体的定义必须在一起;下面声明内联函数的语句是无效的:inlineintMax(inta,intb);而下面的内联函数的定义是有效的:inlineintMax(inta,intb){return((a>b)?a:b)};(c语言声明)C++类的成员函数也可以被定义为内联函数;比如:classStudent{private:intnIDintnAge;floatfScore;public:voidsetID(intnid){nID=nid;}//该成员函数默认

4、自动为内联函数(隐式定义内联函数)intgetID(void){returnnID;}//该成员函数默认自动为内联函数(隐式定义内联函数)inlinevoidsetAge(intnage){nAge=nage;}//显式定义内联函数inlineintgetAge(void){returnnAge;}//显式定义内联函数voidsetScore(floatfscore);//类定义体内没有声明为内联函数;floatgetScore(void);//类定义体内没有声明为内联函数;}inlinevoidStudent::setScore(floatfscore){fScore=fsco

5、re;}//类定义体外实现为内联函数;inlinefloatStudent::getScore(void){returnfScore;}//类定义体外实现为内联函数;C++中,在类定义体内部定义了函数体的成员函数,被编译器默认为内联函数,而不管这个函数头前面是否有关键字inline,比如:setID()、getID()、setAge()、getAge();也可以把实现在类定义体外部的成员函数定义为内联函数,这个时候在类定义体中只有成员函数头的声明,而其实现是在类定义体外部,比如:setScore()和getScore();即便是可以把实现在类定义体外部的成员函数定义为内联函数,那

6、该成员函数的实现也必须写在声明类定义体的哪个头文件(.h)中,不能违反规则;即:内联函数的定义和实现都必须在同一个头(.h)文件中;内联函数的局限性:1、由于内联函数与宏一样也是实现为代码替换,所以定义为内联函数的函数体不宜过大,如果函数体过大,则某些普通的编译器就会放弃内联方式,而改用调用普通函数的方式,这样就失去了内联函数的意义了;所以,内联函数的函数体代码不宜过大,一般就是3---4行代码即可;2、由于内联函数是编译器在便宜阶段进行函数体展开的,所以,这就把类的内联函数的定义与实现都必须在声明类的那个头文件中,而不能放在实现类的那个cpp文件中;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。