Почему плохие глобальные переменные в однопоточном встроенном приложении - PullRequest
29 голосов
/ 16 мая 2009

Большинство возражений, которые я вижу в отношении использования глобальных переменных, имеют смысл, поскольку они относятся к проблемам нескольких потоков, безопасности потоков и т. Д.

Но у вас есть какие-то возражения в небольшом однопоточном корпусе без ОС? В моем случае я пишу свою встроенную систему на «С», если это имеет значение. Я также единственный разработчик продукта.

Почему устранение глобальных переменных сделает мой код лучше?

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

Ответы [ 13 ]

0 голосов
/ 16 мая 2009

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

Хотя ваш продукт может быть небольшим и опрятным прямо сейчас - где использование глобальных переменных не усложняет общий дизайн или ухудшает читаемость - кто скажет, что продукт не станет намного больше или будет включен в другой продукт? И не дай бог другому сопровождающему / разработчику придётся разобраться с использованием вами глобальных переменных.

Конечно, вы можете решить использовать глобальные переменные сейчас, и когда проект становится все более сложным, вернитесь назад и переписайте его части, но зачем навязывать эту дополнительную работу себе? Вы с большей вероятностью (если вы вообще помните глобальные переменные) решите, что выполнять эту работу - это слишком много усилий, и позволить дизайну уйти: в этот момент у вас проблемы!

Итак, , избавьте себя от головной боли и задумайтесь о будущем. Необходимая работа сейчас, вероятно, облегчит жизнь в будущем.

Если это не убедило вас, представьте, что вы разработчики, которые работали над этим проектом, и их код был признан ошибочным и виновным в недопустимых методах программирования перед Верховным судом: Код ошибки алкотестера отражает важность источника обзор

0 голосов
/ 16 мая 2009

Проблема в том, чтобы отследить, какой бит вашего последнего кода изменил состояние глобального. Как правило, вы хотите, чтобы переменные были в наименьшей возможной области видимости, чтобы вам было легче их рассуждать.

0 голосов
/ 16 мая 2009

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

Нетрудно отследить, является ли ваше приложение небольшим, но чем оно больше, и чем больше у вас глобальных переменных, тем больше код приложения выглядит как спагетти.

Короче - это кошмар обслуживания и отладки.

...