__NOTOC__
In
computer programming, an automatic variable is a local
variable which is allocated and deallocated automatically when program flow enters and leaves the variable's scope. The
scope
Scope or scopes may refer to:
People with the surname
* Jamie Scope (born 1986), English footballer
* John T. Scopes (1900–1970), central figure in the Scopes Trial regarding the teaching of evolution
Arts, media, and entertainment
* CinemaS ...
is the lexical context, particularly the function or block in which a variable is defined. Local data is typically (in most languages) invisible outside the function or lexical context where it is defined. Local data is also invisible and inaccessible to a ''called'' function,
[unless it is a nested function, which itself is ''defined'' along that local data] but is not deallocated, coming back in scope as the
execution thread
In computer science, a thread of Execution (computing), execution is the smallest sequence of programmed instructions that can be managed independently by a scheduling (computing), scheduler, which is typically a part of the operating system. T ...
returns to the caller.
Automatic local variables primarily applies to
recursive lexically-scoped languages.
[although they exist in a somewhat similar, but not identical, form also in recursive languages with dynamic scoping, such as older variants of ]LISP
A lisp is a speech impairment in which a person misarticulates sibilants (, , , , , , , ). These misarticulations often result in unclear speech.
Types
* A frontal lisp occurs when the tongue is placed anterior to the target. Interdental lisping ...
Automatic local variables are normally
allocated in the stack frame of the procedure in which they are declared.
[unless otherwise specified, such as static or heap-based data, which are specifiable in some languages] This was originally done to achieve
re-entrancy and allowing
recursion,
[When the reentrant property of the routine is used, for recursion or otherwise, the optimizer must ''not'' try to allocate such variables in ]processor register
A processor register is a quickly accessible location available to a computer's processor. Registers usually consist of a small amount of fast storage, although some registers have specific hardware functions, and may be read-only or write-only. ...
s (for efficiency) as this would break the reentrancy. a consideration that still applies today. The concept of automatic variables in recursive (and
nested) functions in a lexically scoped language was introduced to the wider audience with
ALGOL in the late 1950s, and further popularized by its many descendants.
The term ''
local variable'' is usually synonymous with automatic variable, since these are the same thing in many programming languages, but local is more general – most local variables are automatic local variables, but
static local variables also exist, notably in C. For a static local variable, the allocation is static (the lifetime is the entire program execution), not automatic, but it is only in scope during the execution of the function.
In specific programming languages
C, C++
(Called ''automatic'' variables.)
All variables declared within a
block of code are automatic by default. An uninitialized automatic variable has an
undefined value until it is assigned a valid value of its type. The storage-class specifier
auto
can be added to these variable declarations as well, but as they are all automatic by default this is entirely redundant and rarely done.
In C, using the storage class
register
is a hint to the compiler to cache the variable in a processor register. Other than not allowing the address-of operator (
&
) to be used on the variable or any of its subcomponents, the compiler is free to ignore the hint.
In C++, the constructor of automatic variables is called when the execution reaches the place of declaration. The destructor is called when it reaches the end of the given program block (program blocks are surrounded by curly brackets). This feature is often used to manage resource allocation and deallocation, like opening and then automatically closing files or freeing up memory. See
Resource Acquisition Is Initialization (RAII).
Since C++11, C++ allows variables to be declared with the
auto
type specifier, but this means that the variable's type is
inferred
Inferences are steps in reasoning, moving from premises to logical consequences; etymologically, the word '' infer'' means to "carry forward". Inference is theoretically traditionally divided into deduction and induction, a distinction that i ...
, and does not refer to the scope of the variable.
Java
(Called ''local variables''.)
Similar to C and C++, but there is no
auto
or
register
keyword. However, the Java compiler will not allow the usage of a not-explicitly-initialized local variable and will give a compilation error (unlike C and C++ where the compiler will usually only give a warning). The Java standard demands that every local variable must be explicitly initialized before being used. This differs from instance variables, which are implicitly initialized with default values (which are for numbers and for objects).
Perl
(Called ''lexical'', ''my'' or ''private'' variables.)
In Perl, local variables are declared using the
my
operator. Uninitialized scalars will have the value
undef
; uninitialized arrays or hashes will be
()
.
Perl also has a
local
operator that does not create automatic variables,
instead giving global (package) variables a temporary value, which is
dynamically scoped
In computer programming, the scope of a name binding (an association of a name to an entity, such as a variable) is the part of a program where the name binding is valid; that is, where the name can be used to refer to the entity. In other parts o ...
to the enclosing block. When the scope of the variable is left, the old value is restored.
See also
*
C syntax#Storage class specifiers
*
Variable-length array (
C99 new feature)
*
Call stack
*
Object lifetime
In object-oriented programming (OOP), the object lifetime (or life cycle) of an object is the time between an object's creation and its destruction. Rules for object lifetime vary significantly between languages, in some cases between implementa ...
Notes
References
{{Memory management
Memory management
Variable (computer science)
es:Asignación automática de memoria
de:Automatische Variable