C语言的gcc扩展语法17-inline函数

前面讲了gcc的类型扩展属性,其实还有标签label扩展属性,枚举扩展属性等,但都不太重要,也不常用,就不讲了。今天来专门讲讲gcc的内联函数特性,使用内联函数,可以减少函数调用,加快程序运行速度。

一般新手会有个误解,认为只要使用了inline定义函数,则编译的时候,此内联函数一定会在调用它的地方被直接展开,就像宏定义似的。但其实对gcc来说是不准确的,对gcc来说,inline只是建议,具体是否展开,还要看其他因素。比如没有使用相关优化选项,则不会内联。如果使用了相关优化选项,如-finline-functions,-O等,有时gcc也会对那些简单的函数自动内联,即使那些函数并没有定义内联。

下面内联函数通常的声明方式有下面两种。

使用static来装饰inline:

static inline intinc (int *a)

使用extern声明,然后接着定义的时候使用inline:

extern int inc (int *a);inline intinc (int *a)

如果一个inline函数不是static的,其他文件也有可能调用这个函数。但是因为一个全局符号(全局变量,函数名等)在一个程序中只能定义一次,如果其他代码需要用到这个符号,则需要链接。所以这个函数还得汇编成一个函数块,好被其他模块链接,其他模块也就不能直接展开。所以,只是在一个源文件中使用的话,记得给inline函数加上static标签。小编推荐一个学C语言/C++的学习裙【 六二七,零一二,四六四 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

使用的简单方法是,在头文件中使用extern inline定义函数,把另一份相同没有使用extern inline的函数定义复制到库文件中。这样大部分的此函数调用都会展开了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容