Automatic variable: Difference between revisions

Content deleted Content added
C, C++: The & operator in C is properly called "address-of", not "reference." Added citation for the register keyword which supports this usage.
C, C++: add/touch-up some stuff about `auto`
Line 9:
==In specific programming languages==
===C, C++===
 
{{See also|C syntax#Storage class specifiers}}
 
(Called ''automatic'' variables.)
 
All variables declared within a [[block (programming)|block]] of code are automatic by default. An uninitialized automatic variable has an [[undefined behavior|undefined]] value until it is assigned a valid value of its type. <ref>{{As of|2008|alt=Current}} {{cite web|url= http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1256.pdf |title=C standard }}&nbsp;{{small|(3.61&nbsp;[[Mebibyte|MiB]])}}: section 6.2.4, Storage durations of objects</ref> The storage-class specifier <code>auto</code> 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 <code>register</code> is a hint to the compiler to cache the variable in a processor register. Other than not allowing the address-of operator (<code>&</code>) to be used on the variable or any of its subcomponents, the compiler is free to ignore the hint.<ref>{{citation|url=https://en.cppreference.com/w/c/language/storage_duration| title=Storage Duration| website=cppreference.com}}</ref>
 
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). Note,

Since C++11, hasC++ aallows newvariables to be declared with the <code>auto</code> type specifier,<ref>{{citation| url=http://en.cppreference.com/w/cpp/language/auto| title=Placeholder type specifiers| website=cppreference.com}}</ref> which is different.but this Inmeans this case,that the variable's type is [[type inference|inferred]], and does not refer to the scope of the variable.
 
===Java===