Автоматическая переменная

редактировать

В компьютерное программирование, автоматическая переменная - это локальная переменная, которая выделяется и освобождается автоматически, когда поток программы входит в область действия переменной и покидает ее. Область - это лексический контекст, в частности, функция или блок, в котором определена переменная. Локальные данные обычно (в большинстве языков) невидимы вне функции или лексического контекста, в котором они определены. Локальные данные также невидимы и недоступны для вызываемой функции, но не де выделены, возвращаясь в область видимости, когда поток выполнения возвращается вызывающей стороне.

Автоматические локальные переменные в первую очередь применимы к рекурсивным языкам с лексической областью видимости. Автоматические локальные переменные обычно размещаются в кадре стека процедуры, в которой они объявлены. Первоначально это было сделано для достижения повторного входа и обеспечения возможности рекурсии, соображение, которое актуально и сегодня. Концепция автоматических переменных в рекурсивных (и вложенных ) функциях в языке с лексической областью видимости была представлена ​​широкой аудитории с помощью АЛГОЛ в конце 1950-х годов и в дальнейшем популяризировалась его многочисленными потомками.

Термин локальная переменная обычно является синонимом автоматической переменной, так как это то же самое во многих языках программирования, но локальная является более общей - большинство локальных переменных являются автоматическими локальными переменными, но статические локальные переменные также существуют, особенно в C. Для статической локальной переменной распределение является статическим (время жизни - это выполнение всей программы), а не автоматическим, но оно находится в области видимости только во время выполнения функции..

В определенных языках программирования

C, C ++

(вызываются автоматическими переменными.)

Все переменные, объявленные в блоке из код автоматические по умолчанию. Неинициализированная автоматическая переменная имеет значение undefined до тех пор, пока ей не будет присвоено допустимое значение ее типа.

В языке C использование регистра класса хранения является подсказкой для компилятор для кэширования переменной в регистре процессора. Помимо запрета использования оператора ссылки () для переменной или любого из ее подкомпонентов, компилятор может игнорировать подсказку.

В C ++ конструктор автоматических переменных вызывается, когда выполнение достигает места объявления. Деструктор вызывается, когда он достигает конца данного программного блока (программные блоки заключены в фигурные скобки). Эта функция часто используется для управления распределением и освобождением ресурсов, например для открытия и последующего автоматического закрытия файлов или для освобождения памяти. См. Раздел Инициализация получения ресурсов (RAII). Обратите внимание, что C ++ 11 имеет новый спецификатор auto[1], который отличается. В этом случае тип переменной выведен.

Java

(вызывается локальными переменными.)

Подобно C и C ++, но отсутствует autoили зарегистрируйтеключевое слово. Однако компилятор Java не разрешит использование неявно инициализированной локальной переменной и выдаст ошибку компиляции (в отличие от C и C ++, где компилятор обычно выдает только предупреждение). Стандарт Java требует, чтобы каждая локальная переменная была явно инициализирована перед использованием. Это отличается от переменных экземпляра, которые неявно инициализируются значениями по умолчанию (0для чисел и nullдля объектов).

Perl

(называются лексическими, my или частными переменными.)

В Perl локальные переменные объявляются с помощью оператора my. Неинициализированные скаляры будут иметь значение undef; неинициализированные массивы или хэши будут иметь вид ().

. Perl также имеет оператор local , который не создает автоматические переменные, вместо этого присваивая глобальным (пакетным) переменным временное значение, равное с динамической областью действия до включающего блока. Когда область видимости переменной остается, старое значение восстанавливается.

См. Также

Примечания

Ссылки

Последняя правка сделана 2021-06-12 19:20:01
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте