Static, extern and inline in Objective-C

折月煮酒 提交于 2019-11-28 16:28:51

问题


What do static, extern and inline (and their combinations) mean in Objetive-C using the LLVM compiler?

Also, I noticed that there are CG_EXTERN and CG_INLINE macros. Should we be using those instead?

(I couldn't find a source with a clear explanation so I thought it might be useful to create one here, or point to it if someone knows one)


回答1:


What do static, extern and inline (and their combinations) mean in Objetive-C using the LLVM compiler?

The same as in C, unless you compile as ObjC++ -- then they mean the same as found in C++.

So here is an introduction for C, but read the links if you are ready to use these because the details are important:


Extern

Summary: Indicates that an identifier is defined elsewhere.

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

Static

Summary (value): Preserves variable value to survive after its scope ends.

Summary (function): Effectively emits unnamed copies - useful for private functions in C, and can be used to escape multiple definition errors when used with inline functions.

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

Inline

Summary: Suggests the body of a function should be moved into the callers.

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


Note that inline and static are quite a bit more complex in C++ (like pretty much everything in C++).

I also found that there are CG_EXTERN and CG_INLINE macros. Should we be using those instead?

No.

Instead, you should specify your own, with your own meanings, if you need this type of functionality. CG_EXTERN and CG_INLINE have specific meanings (which may change), and are meant to be used in their defined context -- also, you don't want to have to include a whole handful of frameworks (all CoreGraphics/ApplicationServices/CoreFoundation/etc.) when you want to specify something is extern in a way that works in C and C++.




回答2:


Justin covered most of it, but I found some other nice resources for those who want to dig deeper:

By declaring a function inline you tell the compiler to replace the complete code of that function directly into the place from where it was called. This is a rather advanced feature that requires understanding of lower-level programming.

Inline functions


This SO question has an enormous answer about extern variables - variables defined "somewhere else" - but need to be used also "here".


Static preserves variable life outside of scope. The Variable is visible within the scope it was declared.

What does a static variable mean?




来源:https://stackoverflow.com/questions/11985307/static-extern-and-inline-in-objective-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!