Re: Объявление глобальных переменных в c.
On Saturday 06 May 2006 07:34, Artem Chuprina wrote:
> Авторов юникса, видимо, тоже напрягало. Поэтому есть _функция_ syslog.
Это камень в сторону ведения лога или организации программы? Если по
организации программы, то откуда _функция_ возьмёт дескрипторы/имена файлов
логов? Сохранит в статической области после инициализации? Так то фактически
то же самое. Кроме того, логов может быть много. Ну и это только пример.
Второй пример, приходящий в голову -- конфиг программы. Лежит объект
MainServerConfig в области глобальных переменных, и вся программа знает что и
как сконфигурировано. Третий пример можно придумать с объектом Listener,
когда по условиям задачи он только один может быть, и из разных частей
программы можно добавлять сокеты для прослушивания в ожидании данных.
> В принципе, вообще в таких случаях стараются сделать именно функцию,
> которая возвращает нужное значение (указатель на объект, если надо).
Откуда данные у функции? Где-то должен храниться указатель на структуру данных
для неё? Такая функция всего лишь один уровень косвенности даёт, что часто
даже (в программах меньше 10000 строк) и не нужно.
> Тогда у тебя гарантированно скрыты детали реализации. А что бывает,
> когда так не делают сразу, можно посмотреть на примере "переменной"
> errno в случае с тредами.
Тут проблема в том, что "изменилось ТЗ", когда систему в 1970-х придумывали,
ни о каких тредах не было мыслей даже. В случае изменения ТЗ что б у тебя не
было спроектировано, всегда можно придумать случай, когда в изменённых
условиях придётся часть существенно перепроектировать.
> Проблему решили, конечно, но не могу сказать,
> чтобы решение было офигительно прямым...
Кстати относительно безболезненно. Приходится только djbdns патчить...
Я собственно к чему всё это говорю. Правило "не делать глобальных переменных"
не должно быть религией, хотя его действительно стоит придерживаться. Но в
таком случае оно становится "делать глобальных переменных разумно мало".
--
Anton Petrusevich
Reply to: