Автоматическая переменная
В компьютерном программировании автоматическая переменная — локальная переменная, которая выделяется и освобождается автоматически, когда поток выполнения программы входит и выходит из области действия переменной. Область действия — это лексический контекст, в частности, функция или блок, в котором определена переменная. Локальные данные обычно (в большинстве языков) невидимы вне функции или лексического контекста, в котором они определены. Локальные данные также невидимы и недоступны для вызываемой функции, но не освобождаются, возвращаясь в область видимости, когда поток выполнения возвращается к вызывающей стороне.
Понятие автоматических локальных переменных в первую очередь применяется в рекурсивных языках с лексической областью видимости. Автоматические локальные переменные обычно размещаются в стековом кадре процедуры, в которой они объявлены. Первоначально это было сделано для достижения повторного входа и разрешения рекурсии, — соображение, которое актуально и сегодня. Концепция автоматических переменных в рекурсивных (и вложенных) функциях в языке с лексической областью видимости была представлена широкой аудитории вместе с ALGOL в конце 1950-х годов и получила дальнейшее распространение благодаря его многочисленным потомкам.
Термин локальная переменная обычно является синонимом автоматической переменной, поскольку во многих языках программирования это одно и то же, но локальная переменная является более общей — большинство локальных переменных являются автоматическими локальными переменными, но также существуют статические локальные переменные, особенно в C. Для статической локальной переменной, выделение области памяти является статическим (время жизни — все время выполнения программы), не автоматическим, но она находится в области видимости только во время выполнения функции.
В конкретных языках программирования
C, C++
Все переменные, объявленные в блоке кода, по умолчанию являются автоматическими. Неинициализированная автоматическая переменная имеет неопределенное значение до тех пор, пока ей не будет присвоено допустимое значение ее типа. Спецификатор auto может быть добавлен к объявлениям этих переменных, но, поскольку по умолчанию все они автоматические, это совершенно избыточно и делается редко.
В C использование ключевого слова register является подсказкой компилятору, о необходимости кэширования переменной в регистре процессора. Помимо запрещения использования оператора адреса (&) для переменной или любого из ее подкомпонентов, компилятор может игнорировать данную подсказку.
В C++ конструктор автоматических переменных вызывается, когда выполнение достигает места объявления. Деструктор вызывается, когда он достигает конца заданного блока программы (блоки программы заключены в фигурные скобки). Эта функция часто используется для управления выделением и освобождением ресурсов, например для открытия и автоматического закрытия файлов или освобождения памяти. См. раздел «Инициализация ресурсов — это инициализация (RAII)».
Начиная с C++11, C++ позволяет объявлять переменные с ключевым словом auto, но это означает, что тип переменной выводится и не относится к области действия переменной.
Java
Автоматические переменные называются локальными переменными.
Подобно C и C++, но здесь нет ключевого слова auto или register. Однако компилятор Java не позволит использовать локальную переменную, явно не инициализированную и выдаст ошибку компиляции (в отличие от C и C++, где компилятор обычно выдает только предупреждение). Стандарт языка Java требует, чтобы инициализацию каждой локальной переменной перед её использованием. Это отличается от переменных объектов, которые неявно инициализируются значениями по умолчанию (которые равны 0 для чисел и null для объектов).
Perl
(Автоматические переменные называются лексическими, моими (my) или частными (private) переменными.)
В Perl локальные переменные объявляются с помощью оператора my. Неинициализированные скалярные переменные будут иметь значение undef; неинициализированные массивы или хэши будут иметь значение ().
В Perl также есть оператор local, который не создает автоматических переменных , вместо этого присваивая глобальным (пакетным) переменным временное значение, которое динамически привязано к окружающему блоку. При выходе из области действия переменной старое значение восстанавливается.
См. также
- Массив переменной длины (новая функция C99)
- Стек вызовов
Заметки
- если это не вложенная функция, которая определена вместе локальными данными
- хотя они существуют в похожей, но не идентичной форме также и в рекурсивных языках с динамической областью видимости, таких как старые варианты языка LISP
- , если не указано иное, к примеру, статические данные или данные кучи , которые указываются в некоторых языках
- Когда используется свойство реентерабельности подпрограммы, для рекурсии или иным образом, оптимизатор не должен пытаться размещать такие переменные в регистрах процессора (для эффективности), поскольку это нарушило бы реентерабельность.
Ссылки
- на 2008 год C standard. Дата обращения: 30 августа 2022. Архивировано 11 января 2018 года. (3.61 ): section 6.2.4, Storage durations of objects
- Storage Duration, Архивировано 9 октября 2022, Дата обращения: 30 августа 2022
- Placeholder type specifiers, Архивировано 20 октября 2016, Дата обращения: 30 августа 2022
- 4.12.5 Initial Values of Variables. Sun Microsystems. Дата обращения: 17 октября 2008. Архивировано 5 сентября 2012 года.
- Private variables via my() - perlsub - perldoc.perl.org. Дата обращения: 17 октября 2008. Архивировано 21 сентября 2020 года.
- Temporary values via local() - perlsub - perldoc.perl.org. Дата обращения: 25 февраля 2011. Архивировано 21 сентября 2020 года.
Википедия, чтение, книга, библиотека, поиск, нажмите, истории, книги, статьи, wikipedia, учить, информация, история, скачать, скачать бесплатно, mp3, видео, mp4, 3gp, jpg, jpeg, gif, png, картинка, музыка, песня, фильм, игра, игры, мобильный, телефон, Android, iOS, apple, мобильный телефон, Samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Сеть, компьютер, Информация о Автоматическая переменная, Что такое Автоматическая переменная? Что означает Автоматическая переменная?
V kompyuternom programmirovanii avtomaticheskaya peremennaya lokalnaya peremennaya kotoraya vydelyaetsya i osvobozhdaetsya avtomaticheski kogda potok vypolneniya programmy vhodit i vyhodit iz oblasti dejstviya peremennoj Oblast dejstviya eto leksicheskij kontekst v chastnosti funkciya ili blok v kotorom opredelena peremennaya Lokalnye dannye obychno v bolshinstve yazykov nevidimy vne funkcii ili leksicheskogo konteksta v kotorom oni opredeleny Lokalnye dannye takzhe nevidimy i nedostupny dlya vyzyvaemoj funkcii no ne osvobozhdayutsya vozvrashayas v oblast vidimosti kogda potok vypolneniya vozvrashaetsya k vyzyvayushej storone Ponyatie avtomaticheskih lokalnyh peremennyh v pervuyu ochered primenyaetsya v rekursivnyh yazykah s leksicheskoj oblastyu vidimosti Avtomaticheskie lokalnye peremennye obychno razmeshayutsya v stekovom kadre procedury v kotoroj oni obyavleny Pervonachalno eto bylo sdelano dlya dostizheniya povtornogo vhoda i razresheniya rekursii soobrazhenie kotoroe aktualno i segodnya Koncepciya avtomaticheskih peremennyh v rekursivnyh i vlozhennyh funkciyah v yazyke s leksicheskoj oblastyu vidimosti byla predstavlena shirokoj auditorii vmeste s ALGOL v konce 1950 h godov i poluchila dalnejshee rasprostranenie blagodarya ego mnogochislennym potomkam Termin lokalnaya peremennaya obychno yavlyaetsya sinonimom avtomaticheskoj peremennoj poskolku vo mnogih yazykah programmirovaniya eto odno i to zhe no lokalnaya peremennaya yavlyaetsya bolee obshej bolshinstvo lokalnyh peremennyh yavlyayutsya avtomaticheskimi lokalnymi peremennymi no takzhe sushestvuyut staticheskie lokalnye peremennye osobenno v C Dlya staticheskoj lokalnoj peremennoj vydelenie oblasti pamyati yavlyaetsya staticheskim vremya zhizni vse vremya vypolneniya programmy ne avtomaticheskim no ona nahoditsya v oblasti vidimosti tolko vo vremya vypolneniya funkcii V konkretnyh yazykah programmirovaniyaC C Vse peremennye obyavlennye v bloke koda po umolchaniyu yavlyayutsya avtomaticheskimi Neinicializirovannaya avtomaticheskaya peremennaya imeet neopredelennoe znachenie do teh por poka ej ne budet prisvoeno dopustimoe znachenie ee tipa Specifikator auto mozhet byt dobavlen k obyavleniyam etih peremennyh no poskolku po umolchaniyu vse oni avtomaticheskie eto sovershenno izbytochno i delaetsya redko V C ispolzovanie klyuchevogo slova register yavlyaetsya podskazkoj kompilyatoru o neobhodimosti keshirovaniya peremennoj v registre processora Pomimo zapresheniya ispolzovaniya operatora adresa amp dlya peremennoj ili lyubogo iz ee podkomponentov kompilyator mozhet ignorirovat dannuyu podskazku V C konstruktor avtomaticheskih peremennyh vyzyvaetsya kogda vypolnenie dostigaet mesta obyavleniya Destruktor vyzyvaetsya kogda on dostigaet konca zadannogo bloka programmy bloki programmy zaklyucheny v figurnye skobki Eta funkciya chasto ispolzuetsya dlya upravleniya vydeleniem i osvobozhdeniem resursov naprimer dlya otkrytiya i avtomaticheskogo zakrytiya fajlov ili osvobozhdeniya pamyati Sm razdel Inicializaciya resursov eto inicializaciya RAII Nachinaya s C 11 C pozvolyaet obyavlyat peremennye s klyuchevym slovom auto no eto oznachaet chto tip peremennoj vyvoditsya i ne otnositsya k oblasti dejstviya peremennoj Java Avtomaticheskie peremennye nazyvayutsya lokalnymi peremennymi Podobno C i C no zdes net klyuchevogo slova auto ili register Odnako kompilyator Java ne pozvolit ispolzovat lokalnuyu peremennuyu yavno ne inicializirovannuyu i vydast oshibku kompilyacii v otlichie ot C i C gde kompilyator obychno vydaet tolko preduprezhdenie Standart yazyka Java trebuet chtoby inicializaciyu kazhdoj lokalnoj peremennoj pered eyo ispolzovaniem Eto otlichaetsya ot peremennyh obektov kotorye neyavno inicializiruyutsya znacheniyami po umolchaniyu kotorye ravny 0 dlya chisel i null dlya obektov Perl Avtomaticheskie peremennye nazyvayutsya leksicheskimi moimi my ili chastnymi private peremennymi V Perl lokalnye peremennye obyavlyayutsya s pomoshyu operatora my Neinicializirovannye skalyarnye peremennye budut imet znachenie undef neinicializirovannye massivy ili heshi budut imet znachenie V Perl takzhe est operator a href wiki D0 9B D0 BE D0 BA D0 B0 D0 BB D1 8C D0 BD D0 B0 D1 8F D0 BF D0 B5 D1 80 D0 B5 D0 BC D0 B5 D0 BD D0 BD D0 B0 D1 8F title Lokalnaya peremennaya local a kotoryj ne sozdaet avtomaticheskih peremennyh vmesto etogo prisvaivaya globalnym paketnym peremennym vremennoe znachenie kotoroe dinamicheski privyazano k okruzhayushemu bloku Pri vyhode iz oblasti dejstviya peremennoj staroe znachenie vosstanavlivaetsya Sm takzheMassiv peremennoj dliny novaya funkciya C99 Stek vyzovovZametkiesli eto ne vlozhennaya funkciya kotoraya opredelena vmeste lokalnymi dannymi hotya oni sushestvuyut v pohozhej no ne identichnoj forme takzhe i v rekursivnyh yazykah s dinamicheskoj oblastyu vidimosti takih kak starye varianty yazyka LISP esli ne ukazano inoe k primeru staticheskie dannye ili dannye kuchi kotorye ukazyvayutsya v nekotoryh yazykah Kogda ispolzuetsya svojstvo reenterabelnosti podprogrammy dlya rekursii ili inym obrazom optimizator ne dolzhen pytatsya razmeshat takie peremennye v registrah processora dlya effektivnosti poskolku eto narushilo by reenterabelnost Ssylkina 2008 god C standard neopr Data obrasheniya 30 avgusta 2022 Arhivirovano 11 yanvarya 2018 goda 3 61 section 6 2 4 Storage durations of objects Storage Duration Arhivirovano 9 oktyabrya 2022 Data obrasheniya 30 avgusta 2022 Placeholder type specifiers Arhivirovano 20 oktyabrya 2016 Data obrasheniya 30 avgusta 2022 4 12 5 Initial Values of Variables neopr Sun Microsystems Data obrasheniya 17 oktyabrya 2008 Arhivirovano 5 sentyabrya 2012 goda Private variables via my perlsub perldoc perl org neopr Data obrasheniya 17 oktyabrya 2008 Arhivirovano 21 sentyabrya 2020 goda Temporary values via local perlsub perldoc perl org neopr Data obrasheniya 25 fevralya 2011 Arhivirovano 21 sentyabrya 2020 goda
