Objective-C中的static,extern和inline

hpi*_*que 29 static inline objective-c llvm extern

做什么static,extern并且inline(和它们的组合)使用LLVM编译器Objetive-C是什么意思?

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

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

jus*_*tin 33

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

与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_EXTERN并且CG_INLINE具有特定的含义(可能会改变),并且意味着在其定义的上下文中使用 - 同样,您不希望包含一小撮框架(所有CoreGraphics/ApplicationServices/CoreFoundation /等).你想要指定一些extern在C和C++中工作的方式.

  • @Justin我很开心,很棒的回答! (3认同)
  • @jake_hetfield听起来不是很干 (2认同)

jak*_*eld 5

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

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

内联函数


这个SO问题外部变量有很大的答案- 变量定义为"其他地方" - 但也需要在"这里"使用.


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

静态变量是什么意思?