C-static
stackoverflow What does “static” mean in C?
I've seen the word static
used in different places in C code; is this like a static function/class in C# (where the implementation is shared across objects)?
wikipedia Static (keyword)
In the C programming language (and its close descendants such as C++ and Objective-C), static is a reserved word controlling both lifetime (as a static variable) and visibility (depending on linkage). The word static
is also used in languages influenced by C, such as Java.
In C, static
is a storage class (not to be confused with classes in object-oriented programming), as are extern
, auto
and register
(which are also reserved words). Every variable and function has one of these storage classes; if a declaration does not specify the storage class, a context-dependent default is used:
extern
for all top-level declarations in a source file,auto
for variables declared in function bodies.
Storage class | Lifetime | Visibility |
---|---|---|
extern |
program execution | external (whole program) |
static |
program execution | internal (translation unit only) |
auto , register |
function execution | (none) |
In these languages, the term "static variable" has two meanings which are easy to confuse:
- A variable with the same lifetime as the program, as described above (language-independent); or
- (C-family-specific) A variable declared with storage class
static
.
Variables with storage class extern
, which include variables declared at top level without an explicit storage class, are static
in the first meaning but not the second.