Глобальная переменная: различия между версиями

[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
Addbot (обсуждение | вклад)
м Перемещение 12 интервики на Викиданные, d:q1143344
перев
Строка 1:
В [[программирование|программировании]] '''глобальной переменной''' называют [[Переменная (программирование)|переменную]], [[Область видимости|областью видимости]] которой является вся программа (кроме {{не переведено|есть=:en:Variable shadowing|надо=Затенение переменных|текст=затенённых}} областей). Механизмы взаимодействия с глобальными переменными называют '''globalмеханизмами state'''доступа к глобальной среде или '''состоянию ({{lang-en|global environment'''}}, {{lang-en|global state}}). Глобальные переменные могут использоваться для взаимодействия между процедурами и функциями как альтернатива передачи аргументов и возвращения значений<ref name="Керниган"> ''Керниган и Ритчи'' Язык программипования Си — С. 44, 87.</ref>.
 
Использование глобальных переменных имеет недостатки: глобальная переменная может быть изменена в любой точке программы (если она не находится в [[Защита памяти|защищённой памяти]] или объявлена как переменная {{не переведено|есть=:en:Read-only memory|надо=Read-only memory|текст=только для чтения}}), что может повлиять на работу других частей программы<ref>[[:en:William Wulf|William Wulf]] and Mary Shaw, “Global Variable [[:en:Considered Harmful|Considered harmful]]”, ACM SIGPLAN Notices, volume 8, issue 2, 1973 February, С. 28–34.</ref>. По этой причине глобальные переменные имеют неограниченный потенциал для создания взаимных зависимостей, что приводит к усложнению программы. Однако в некоторых случаях бывает полезно использовать глобальные переменные. Например, они могут быть использованы, чтобы избежать необходимости прохода часто используемых переменных через несколько функций. Глобальные переменные также затрудняют интеграцию [[Модуль (программирование)|модулей]], поскольку код, написанный ранее, может содержать глобальные переменные с теми же именами, что и во встраиваемом модуле.
 
Глобальные переменные широко используются для передачи данных между секциями кода, которые не участвуют в отношениях вызовов, такие как параллельные [[Поток выполнения|нити исполнения]] или [[обработка сигналов|обработчики сигналов]]. Без надлежащей блокировки (например, с помощью [[мьютекс]]а), код, использующий глобальные переменные, не будет [[Thread-safety|потокобезопасным]], за исключением переменных, доступных {{не переведено|есть=:en:Read-only memory|надо=Read-only memory|текст=только для чтения}} в [[Защита памяти|защищённой]] области памяти. С увеличением количества переменных и, соответственно, [[Блокировка (программирование)|блокировок]] увеличиваются вероятность [[Взаимная блокировка|взаимных блокировок]].
 
{{translate|en}}
 
== См. также ==