Jump to content

Static (keyword)

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Jason Quinn (talk | contribs) at 14:36, 13 April 2020 (restructured article... this article was terrible... and it still is, but hopefully the new sectioning allows the article to evolve into a much better article... previous version was a dead end... might just be better to rewrite whole article). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

In some programming languages such as C (and its close descendants such as C++, Objective-C, and Java), static is a reserved word controlling both lifetime (as a static variable) and visibility (depending on linkage). The effect of the keyword varies depending on the details of the specific programming language.

Common C/C++ behavior

In C and C++, the effect of the static keyword in C depends on where the declaration occurs.

It may act as a 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:

  1. A variable with the same lifetime as the program, as described above (language-independent); or
  2. (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.

Static global variable

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"). In this usage, the keyword static is known as an "access specifier".

Static function

Similarly, a static function – a function declared as static at the top level of a source file (outside any class definitions) – is only visible throughout that file ("file scope", also known as "internal linkage").

Static local variables

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.

C++ specific

Static member variables

In C++, member variables declared as static inside class definitions are class variables (shared between all class instances, as opposed to instance variables).

Static method

Similarly, a static method – a method declared as static inside a class definition – is meant to be relevant to all instances of a class rather than any specific instance.

Java