|This article is missing information about the use of the static keyword to declare class methods in C++ and Java. (April 2014)|
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.
static is a storage class (not to be confused with classes in object-oriented programming), as are
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:
externfor all top-level declarations in a source file,
autofor variables declared in function bodies.
||program execution||external (whole program)|
||program execution||internal (translation unit only)|
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
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.
As well as specifying static lifetime, declaring a variable as
static can have other effects depending on where the declaration occurs:
- Static global variable
- A variable declared as
staticat the top level of a source file (outside any function definitions) is only visible throughout that file ("file scope", also known as "internal linkage").
- Static local variables
- Variables declared as
staticinside 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 (
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.
- Static member variables
- In C++, member variables declared as
staticinside class definitions are class variables (shared between all class instances, as opposed to instance variables).