objective-c - 如何在 Objective-C 中编写 'global' 内联函数(使用 C 语法)

标签 objective-c c static inline extern

假设我在我的预编译 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,宏使用 staticalways_inline 属性。

大多数(也许是所有)编译器不会内联 extern inline,因为它们一次在单个编译单元上运行 - 一个源文件及其所有包含。

关于objective-c - 如何在 Objective-C 中编写 'global' 内联函数(使用 C 语法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18623392/

相关文章:

ios - 数组不删除重复项

java - C++ 中的 typedef 关键字是否有 Java 等效项或方法?

python - 使用 C 和 Python 代码创建一个 Python 模块

c++ - 通过引用返回局部变量

Android创建静态ArrayList

c - 从c中的另一个文件更新静态全局变量

ios - 将 UiBarButtonItem 上的 UIImage 从标识符更新为图像

ios - 将大 UIImage 比例下载到 UIImageView

objective-c - UITableviewController - 更新特定单元格

c - 辨别值 255 是真实数据还是错误输出