Static, extern and inline in Objective-C
Solution 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++.
Solution 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.
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?
![hpique](https://i.stack.imgur.com/7mgUt.jpg?s=256&g=1)
hpique
iOS, Android & Mac developer. Founder of Robot Media. @hpique
Updated on June 16, 2022Comments
-
hpique about 2 years
What do
static
,extern
andinline
(and their combinations) mean in Objetive-C using the LLVM compiler?Also, I noticed that there are
CG_EXTERN
andCG_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)
-
jake_hetfield almost 12 yearsThis answer would be perfect if only it had a quote from respective link so that the reader wouldn't have to click away from SO to find the answer, unless he wanted to read more =)
-
justin almost 12 years@jake_hetfield thanks. unfortunately,
static
andinline
would each require more than one page if a full quote were added to the answer. so… i don't think i will quote them =\ -
jake_hetfield almost 12 yearsThe links you refer to have rather short descriptions, they would fit into an answer, just my opinion. I would write a new answer but that kind of would feel like steeling yours =)
-
Paul.s almost 12 years@jake_hetfield that doesn't sound very DRY
-
justin almost 12 years@jake_hetfield added some summaries
-
jake_hetfield almost 12 years@Justin I'm very happy, awesome answer!
-
jake_hetfield almost 12 years@Paul.s I agree in keeping things DRY inside of SO, but when it comes to referring to the outside I don't think it counts. In the end I just wanted to give Justin my feedback on how to make his good answer awesome =)
-
zrslv over 10 years
static
has different meaning in different (function/variable/local variable) contexts. -
jake_hetfield over 10 yearsNot really, the definition above applies to all context. Local variables that are declared static, remain alive outside of the scope. However, they are not visible outside of scope, as stated above: "The Variable is visible within the scope it was declared." In objective c static functions are declared with (+) and do not use the static keyword, thus we are only talking variables here. But the concept is the same: The static function remains the same context throughout the application. Only its visibility depends on the scope where it is declared.
-
nhgrif almost 10 yearsStatic functions are not declared with the plus sign (+). These are class level methods you're thinking of. Static functions in Objective-C are exactly what they are in C, and declared the same way.