Чем плохи глобальные переменные?

программирование C++

В инете част встречаю упоминание о том что объявления таких переменных - это плохо. Преподаватель С++ говорил что это очень плохо... А что в этом плохого? почему не стоит так объявлять переменные?
Ответы:
Потому что эти переменные доступны всей программе, а значит могут быть случайно изменены не той функцией, что надо. И такую ошибку очень сложно искать. Кроме того, они занимают имена.
Это не плохо. Это малоприменимо, поскольку возникают многочисленные трудности программирования, НО применимо. Мегасложный алгоритм легче составить и отладить без многочисленных глобальных переменных  и применить их только в специальных случаях. Возникает так называемый "гнилой код", большая многомодульная программа (в связке с операционной системой) очень нестабильна, а "выловить" связанные с этим семантически ошибки чрезвычайно трудно или невозможно вследствие ограниченного времени разработки ПО. А вот в простеньких программах - пожалуйста, применяйте, но учтите - у Вас выработается плохой стиль программирования.
Говорить в программировании что что-то в общем плохо - это неправильно. Все зависит от ситуации.
Глобальные переменные - это переменные доступные всем модулям и живущие все время выполнения программы. Соответственно они еще и занимают место.
Локальные переменные - это переменные доступные только из текущего модуля и живущие вместе с модулем.
Если бы создание глобальных переменных - было очень плохо, то их бы не было в языке. Раз они есть значит есть случаи, когда они необходимы.
На практике пользуйся правилом - сначала создаются локальные переменные внутри функции/процедуры, потом внутри модуля, и только в последнюю очередь глобальные.
По моему опыту они плохи тем, что программу становится труднее поддерживать и модифицировать. А для любой программы, хотя бы с 10 пользователями цикл поддержки гораздо дольше разработки. 10 раз пожалеете. Вот конкретные затыки:
Допустим программа оперирует с каким-то сложным объектом, который хранится в файле, например с изображением, и экземпляр открытого файла описан сложной структурой, которая хранится в глобальной переменной. Для того чтобы заставить программу работать с 2-я файлами вам одновременно, переключаясь между ними, вам придется переделывать переменную на массив и изменять ВСЕ места в программе, в которых к ней идет обращение.
Если вам при этом придется добавлять многопоточность, то вы быстрее перепиште весь код чем поймете, в каких местах две разные функции одновременно пишут в глобальную переменную.
Если у вас какая-то часть получилась очень удачно и вы захотите включить ее в другой свой проект, то вам придется тащить еще и все глобальные переменные.


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.