[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Объявление глобальных переменных в c.



On Saturday 06 May 2006 07:34, Artem Chuprina wrote:
> Авторов юникса, видимо, тоже напрягало.  Поэтому есть _функция_ syslog.

Это камень в сторону ведения лога или организации программы? Если по 
организации программы, то откуда _функция_ возьмёт дескрипторы/имена файлов 
логов? Сохранит в статической области после инициализации? Так то фактически 
то же самое. Кроме того, логов может быть много. Ну и это только пример. 
Второй пример, приходящий в голову -- конфиг программы. Лежит объект 
MainServerConfig в области глобальных переменных, и вся программа знает что и 
как сконфигурировано. Третий пример можно придумать с объектом Listener, 
когда по условиям задачи он только один может быть, и из разных частей 
программы можно добавлять сокеты для прослушивания в ожидании данных.

> В принципе, вообще в таких случаях стараются сделать именно функцию,
> которая возвращает нужное значение (указатель на объект, если надо).

Откуда данные у функции? Где-то должен храниться указатель на структуру данных 
для неё? Такая функция всего лишь один уровень косвенности даёт, что часто 
даже (в программах меньше 10000 строк) и не нужно.

> Тогда у тебя гарантированно скрыты детали реализации.  А что бывает,
> когда так не делают сразу, можно посмотреть на примере "переменной"
> errno в случае с тредами.  

Тут проблема в том, что "изменилось ТЗ", когда систему в 1970-х придумывали, 
ни о каких тредах не было мыслей даже. В случае изменения ТЗ что б у тебя не 
было спроектировано, всегда можно придумать случай, когда в изменённых 
условиях придётся часть существенно перепроектировать. 

> Проблему решили, конечно, но не могу сказать, 
> чтобы решение было офигительно прямым...

Кстати относительно безболезненно. Приходится только djbdns патчить...


Я собственно к чему всё это говорю. Правило "не делать глобальных переменных" 
не должно быть религией, хотя его действительно стоит придерживаться. Но в 
таком случае оно становится "делать глобальных переменных разумно мало".
-- 
Anton Petrusevich



Reply to: