Static, extern and inline in Objective-C

hpique picture hpique · Aug 16, 2012 · Viewed 16k times · Source

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)

Answer

justin picture justin · Aug 16, 2012

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++.