假设我在我的预编译 header 中包含一个 header 文件,其中包含一堆内联函数,可在任何项目的 TU 中用作助手——编写这些内联函数的正确方法是什么?
1) 作为静态内联?例如:
static inline BOOL doSomethingWith(Foo *bar)
{
// ...
}
2) 作为外部内联?例如:
在 Shared.h 中
extern inline BOOL doSomethingWith(Foo *bar);
在 Shared.m 中
inline BOOL doSomethingWith(Foo *bar)
{
// ...
}
我对内联的意图是:
- 通过封装通用指令使代码不那么冗长
- 集中它们包含的代码以帮助将来维护
- 为了类型安全而使用它们而不是宏
- 能够有返回值
到目前为止,我只在野外看到过变体 1)。
我已经读过(遗憾的是再也找不到了)变体 1) 没有准确地将内联函数的主体移动到调用者中,而是创建了一个新函数,只有 extern inline
确保了那种行为。
最佳答案
由于你给出的原因,跳过你是否应该内联,在 Cocoa 中内联的标准方法是使用预定义的宏 NS_INLINE
- 在源文件中使用函数或在导入的标题中。所以你的例子变成了:
NS_INLINE BOOL doSomethingWith(Foo *bar)
对于 GCC/Clang,宏使用 static
和 always_inline
属性。
大多数(也许是所有)编译器不会内联 extern inline
,因为它们一次在单个编译单元上运行 - 一个源文件及其所有包含。
关于objective-c - 如何在 Objective-C 中编写 'global' 内联函数(使用 C 语法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18623392/