[其它应用] 使用内联函数时需要特别留意的一些情况

[复制链接]
660|3
 楼主| 哈根达斯uz 发表于 2024-2-25 19:41 | 显示全部楼层 |阅读模式
函数体简单: 内联函数的函数体应该足够简单。如果函数体过于庞大,内联函数的好处可能会被抵消,而且可能导致固件大小膨胀。

避免复杂控制流: 内联函数的函数体不应包含复杂的控制流结构,例如递归、大型循环或者复杂的条件语句。这是因为内联函数需要在调用点展开,而这些结构会使得展开后的代码过于复杂。

避免与宏混用: 内联函数和宏有相似的作用,但是它们有不同的使用规则。混用时要注意,以免出现不可预料的问题。宏在预处理阶段展开,而内联函数是在编译阶段展开,因此在参数使用等方面有差异。

内联函数不可递归: 内联函数本身不应是直接递归函数。由于内联函数在每次调用点都会展开,如果内联函数直接或间接地调用自身,可能导致无限展开,造成编译器错误或者无限循环。

inline 关键字的使用: inline 关键字必须与函数的定义体放在一起,仅将 inline 放在函数声明前不起作用。函数的定义体应在同一个编译单元中可见,以便编译器能够进行内联。

编译器的自由裁量权: inline 仅仅是对编译器的建议,最终是否真正内联由编译器决定。复杂函数体、递归函数等情况可能会使编译器忽略 inline 建议。

头文件中的内联函数: 内联函数的定义通常放在头文件中,以便在每个调用点都能看到定义。这有助于编译器在调用点展开内联函数。

与静态修饰符结合使用: 在一些情况下,使用 static 和 inline 结合使用,可以使内联函数在文件内部可见,不会污染命名空间。

小夏天的大西瓜 发表于 2024-2-26 18:10 | 显示全部楼层
函数体简单: 内联函数的函数体应该足够简单。如果函数体过于庞大,内联函数的好处可能会被抵消,而且可能导致固件大小膨胀
中国龙芯CDX 发表于 2024-2-26 21:36 | 显示全部楼层
inline 关键字必须与函数的定义体放在一起,仅将 inline 放在函数声明前不起作用。函数的定义体应在同一个编译单元中可见,以便编译器能够进行内联。
小岛西岸来信 发表于 2025-8-30 14:08 | 显示全部楼层
使用内联函数需留意:1. 函数体不宜过大,否则增加代码体积;2. 避免递归,编译器通常不支持内联递归函数;3. 频繁调用的小函数更适合,否则优化效果有限;4. 注意调试难度,内联函数不会生成单独符号;5. 虚函数、包含循环 /switch 的函数可能不被内联,依赖编译器决策。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

382

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部