static
使用 LLVM 编译器在 Objetive-C 中,extern
和inline
(及其组合) 是什么意思?
另外,我注意到有CG_EXTERN
和CG_INLINE
宏。我们应该改用那些吗?
(我找不到有明确解释的来源,所以我认为在这里创建一个可能很有用,或者如果有人知道,请指出它)
static
使用 LLVM 编译器在 Objetive-C 中,extern
和inline
(及其组合) 是什么意思?
另外,我注意到有CG_EXTERN
和CG_INLINE
宏。我们应该改用那些吗?
(我找不到有明确解释的来源,所以我认为在这里创建一个可能很有用,或者如果有人知道,请指出它)
使用 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++ 中工作的方式。
贾斯汀涵盖了大部分内容,但我为那些想要深入挖掘的人找到了一些其他不错的资源:
通过声明内联函数,您可以告诉编译器将该函数的完整代码直接替换到调用它的位置。这是一个相当高级的功能,需要了解较低级别的编程。
这个 SO question对外部变量有一个巨大的答案——变量定义在“其他地方”——但也需要在“这里”使用。
静态保留范围之外的变量生命。变量在它声明的范围内是可见的。