Глобальная переменная в программировании — переменная, областью видимости которой является вся программа, если только она не . Механизмы взаимодействия с глобальными переменными называют механизмами доступа к глобальному окружению или состоянию (, ). Глобальные переменные могут использоваться для взаимодействия между процедурами и функциями как альтернатива передачи аргументов и возвращения значений Керниган и Ритчи Язык программирования Си — С. 44, 87..

Использование глобальных переменных имеет недостатки: глобальная переменная может быть изменена в любой точке программы (если она не находится в защищённой памяти или объявлена как переменная только для чтения), что может повлиять на работу других частей программыWilliam Wulf and Mary Shaw, «Global Variable Considered harmful», ACM SIGPLAN Notices, volume 8, issue 2, 1973 February, С. 28-34.. По этой причине глобальные переменные имеют неограниченный потенциал для создания взаимных зависимостей, что приводит к усложнению программы. Однако в некоторых случаях бывает полезно использовать глобальные переменные. Например, они могут быть использованы, чтобы избежать необходимости прохода часто используемых переменных через несколько функций. Глобальные переменные также затрудняют интеграцию модулей, поскольку код, написанный ранее, может содержать глобальные переменные с теми же именами, что и во встраиваемом модуле.

Глобальные переменные широко используются для передачи данных между секциями кода, которые не участвуют в отношениях вызовов, такие как параллельные нити исполнения или обработчики сигналов. Без надлежащей блокировки (например, с помощью мьютекса), код, использующий глобальные переменные, не будет потокобезопасным, за исключением переменных, доступных только для чтения в защищённой области памяти. С увеличением количества переменных и, соответственно, блокировок увеличивается вероятность взаимных блокировок.

Пример на Си: int a; /* Объявление глобальной целочисленной переменной «а» */ float b = 6; /* Объявление глобальной переменной с плавающей запятой «b» и присваивание ей значения «6» */

int main(void) { a = 12; /* Присваивание переменной «а» значения «12» */ return a+b; }

Примечания

Ссылки Global Variables Are Bad

Категория:Переменная (программирование)