Локальная переменная


В компьютерных науках локальная переменная — это переменная , которой задана локальная область действия . Ссылки на локальные переменные в функции или блоке, в которых они объявлены, переопределяют то же имя переменной в большей области. В языках программирования только с двумя уровнями видимости локальные переменные противопоставляются глобальным переменным . С другой стороны, многие языки, производные от ALGOL , допускают любое количество вложенных уровней видимости с закрытыми переменными, функциями, константами и типами, скрытыми внутри них либо с помощью вложенных блоков, либо вложенных функций .. Локальные переменные имеют фундаментальное значение для процедурного программирования и, в более общем плане, для модульного программирования : переменные локальной области видимости используются, чтобы избежать проблем с побочными эффектами , которые могут возникнуть с глобальными переменными .

Локальные переменные могут иметь лексическую или динамическую область видимости , хотя лексическая (статическая) область видимости встречается гораздо чаще. В лексической области видимости (или лексической области видимости; также называемой статической областью видимости или статической областью видимости), если областью действия имени переменной является определенный блок, то ее областью действия является программный текст определения блока: в тексте этого блока существует имя переменной, и привязан к значению переменной, но вне текста этого блока имя переменной не существует. Напротив, в динамической области видимости (или динамической области видимости), если областью действия имени переменной является определенный блок, то ее областью действия является этот блок и все функции, транзитивно вызываемые этим блоком (кроме случаев, когда они снова переопределяются другим объявлением); после окончания блока имя переменной не существует. Некоторые языки, такие как Perl иCommon Lisp позволяет программисту выбирать статическую или динамическую область видимости при определении или переопределении переменной. Примеры языков, использующих динамическую область видимости, включают Logo , Emacs lisp и языки оболочки bash , dash и «локальное» объявление оболочки MirBSD Korn ( mksh ). Большинство других языков предоставляют локальные переменные с лексической областью видимости.

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

Языки программирования, использующие семантику вызова по значению, предоставляют вызываемой подпрограмме собственную локальную копию переданных ей аргументов . В большинстве языков эти локальные параметры обрабатываются так же, как и другие локальные переменные внутри подпрограммы. Напротив, семантика вызова по ссылке и вызова по имени позволяет параметрам действовать как псевдонимы значений, переданных в качестве аргументов, что позволяет подпрограмме изменять переменные за пределами своей области.

Специальный тип локальной переменной, называемый статической локальной, доступен во многих основных языках (включая C / C++ , Visual Basic и VB.NET ), что позволяет сохранять значение от одного вызова функции к другому — это статическая переменная с локальной областью действия. В этом случае рекурсивные вызовы функции также имеют доступ к (одной, статически выделенной ) переменной. Во всех вышеперечисленных языках статические переменные объявляются как таковые с помощью специального ключевого слова класса хранения (например, static).

Статические локальные переменные в глобальных функциях имеют то же время жизни, что и статические глобальные переменные , потому что их значение остается в памяти на протяжении жизни программы [1] , но имеют область видимости функции (не глобальную область видимости), как и автоматические локальные переменные.