Jump to content

Automatic variable

From Wikipedia, the free encyclopedia

This is an old revision of this page, as edited by Nbarth (talk | contribs) at 09:35, 21 April 2013 (elab local, lifetime vs. context vs. scope). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

In computer programming, an automatic variable is a variable which is allocated and deallocated automatically when program flow enters and leaves the variable's context. This primarily applies to lexically-scoped variables, where the context is the lexical context, particularly the function or block in which a variable is defined. Note that inside a function call within a context, a variable moves out of scope (is inaccessible to the called function) but is not deallocated, coming back in scope when the function returns.

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.

Automatic variables may be allocated in the stack frame of the procedure in which they are declared; this has the useful effect of allowing recursion and re-entrancy. (For efficiency, the optimizer will try to allocate some of these variables in processor registers.)

In specific programming languages

C, C++

(Called automatic variables.)

All variables declared within a block of code are automatic by default, but this can be made explicit with the auto keyword.[note 1] An uninitialized automatic variable has an undefined value until it is assigned a valid value of its type.[1]

Using the storage class register instead of auto is a hint to the compiler to cache the variable in a processor register. Other than not allowing the referencing 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 RAII.

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.[2] This differs from instance variables, which are implicitly initialized with default values (which are 0 for numbers and null 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 ().[3]

Perl also has a local operator that does not create automatic variables,[4] instead giving global (package) variables a temporary value, which is dynamically scoped to the enclosing block. When the scope of the variable is left, the old value is restored.

See also

Notes

  1. ^ Note: the current C++ standard, C++11, adds an additional meaning to the auto keyword, meaning a type that is inferred.

References

  1. ^ Current Template:PDFlink: section 6.2.4, Storage durations of objects
  2. ^ "4.12.5 Initial Values of Variables". Sun Microsystems. Retrieved 2008-10-17.
  3. ^ "Private variables via my() - perlsub - perldoc.perl.org". Retrieved 2008-10-17.
  4. ^ "Temporary values via local() - perlsub - perldoc.perl.org". Retrieved 2011-02-25.