30

static使用 LLVM 编译器在 Objetive-C 中,externinline(及其组合) 是什么意思?

另外,我注意到有CG_EXTERNCG_INLINE宏。我们应该改用那些吗?

(我找不到有明确解释的来源,所以我认为在这里创建一个可能很有用,或者如果有人知道,请指出它)

4

2 回答 2

34

使用 LLVM 编译器的 Objetive-C 中的 static、extern 和 inline(及其组合)是什么意思?

与 C 中的相同,除非您编译为 ObjC++——那么它们的含义与 C++ 中的相同。

所以这里是 C 的介绍,但如果你准备好使用这些链接,请阅读链接,因为细节很重要:


外部

摘要:表示标识符在别处定义。

详情:http ://tigcc.ticalc.org/doc/keywords.html#extern

静止的

摘要(值):保留变量值以在其范围结束后继续存在。

总结(函数):有效地发出未命名的副本 - 对于 C 中的私有函数很有用,并且在与内联函数一起使用时可用于转义多个定义错误。

详情:http ://tigcc.ticalc.org/doc/keywords.html#static

排队

摘要:建议将函数体移到调用者中。

详情:http ://tigcc.ticalc.org/doc/gnuexts.html#SEC93


请注意,内联和静态在 C++ 中要复杂得多(就像 C++ 中的几乎所有东西一样)。

我还发现有 CG_EXTERN 和 CG_INLINE 宏。我们应该改用那些吗?

不。

相反,如果您需要这种类型的功能,您应该使用您自己的含义指定您自己的。CG_EXTERN并且CG_INLINE具有特定的含义(可能会改变),并且旨在在其定义的上下文中使用——此外,您不希望在何时包含一大堆框架(所有 CoreGraphics/ApplicationServices/CoreFoundation/等)你想指定的东西是extern在 C 和 C++ 中工作的方式。

于 2012-08-16T10:37:42.917 回答
5

贾斯汀涵盖了大部分内容,但我为那些想要深入挖掘的人找到了一些其他不错的资源:

通过声明内联函数,您可以告诉编译器将该函数的完整代码直接替换到调用它的位置。这是一个相当高级的功能,需要了解较低级别的编程。

内联函数


这个 SO question对外部变量有一个巨大的答案——变量定义在“其他地方”——但也需要在“这里”使用。


静态保留范围之外的变量生命。变量在它声明的范围内是可见的。

静态变量是什么意思?


于 2012-08-16T11:24:44.687 回答