Objective-C中的static,extern和inline

时间:2012-08-16 10:32:24

标签: objective-c static inline llvm extern

staticexterninline(及其组合)在使用LLVM编译器的Objetive-C中意味着什么?

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

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

2 个答案:

答案 0 :(得分:33)

  

使用LLVM编译器,Objetive-C中静态,外部和内联(及其组合)的含义是什么?

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

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


<强>的extern

摘要:表示标识符已在其他位置定义。

详细信息: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_EXTERNCG_INLINE具有特定含义(可能会发生变化),并且可以在其定义的上下文中使用 - 此外,您不希望包含一小撮框架(全部CoreGraphics / ApplicationServices / CoreFoundation / etc。)当你想要以C和C ++的方式指定extern时。{/ p>

答案 1 :(得分:5)

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

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

Inline functions


This SO question extern 变量有很大的答案 - 变量定义为“其他地方” - 但也需要在“此处”使用。


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

What does a static variable mean?