__inline__ 是否会改变 local static variable 的行为?
💡
原文中文,约18500字,阅读约需44分钟。
📝
内容提要
本文讨论了使用__inline__和__attribute__((always_inline))修饰函数时,对函数中的static变量的影响。文章指出,__inline__和__attribute__((always_inline))并不会改变static变量的行为,因为编译器会决定是否进行内联,应该将NS_INLINE函数视为静态函数。文章建议尽量不要在头文件中声明静态函数,除非清楚其用途。
🎯
关键要点
- __inline__ 和 __attribute__((always_inline)) 不会改变 static 变量的行为。
- 编译器决定是否进行内联,__inline__ 不能简单理解为宏打开。
- 建议不要在头文件中声明 static 函数,除非明确其用途。
- NS_INLINE 函数在正常情况下会默认为 static 属性。
- 在同一个 Compile Unit 中,static 函数的 static 变量是共享的,但在不同 Compile Unit 中则不是。
- static 函数内的 static 变量在每个 Compile Unit 中都有一份副本。
- 正常函数的 static 变量在所有 Compile Unit 中共享一份。
- 使用 __inline__ 可以避免链接时的多重定义错误,但不保证内联成功。
- 如果 __inline__ 失败,可能会变成 weak symbol,不会引起链接错误。
- 总结:static 变量的行为与函数的定义方式密切相关,需谨慎使用。
➡️