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:
In these languages, the term "static variable" has two meanings which are easy to confuse:
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.
The static
keyword when prefixed while declaring a variable or a function can have other effects depending on where the declaration occurs.
A variable declared as static
at the top level of a source file (outside any function definitions) is only visible throughout that file ("file scope", also known as "internal linkage").
Variables declared as static
inside a function are statically allocated, thus keep their memory cell throughout all program execution, while having the same scope of visibility as automatic local variables (auto
and register
), meaning remain local to the function. Hence whatever values the function puts into its static local variables during one call will still be present when the function is called again.