__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 变量的行为与函数的定义方式密切相关,需谨慎使用。
➡️

继续阅读