Конфигурация для функции регистрации - PullRequest
2 голосов
/ 28 июня 2011

Я написал простую функцию ведения журнала, которая отображает метку времени и использует vprintf() для эмуляции printf(). Теперь моя основная программа читает файл конфигурации в struct configuration. Я планирую сделать так, чтобы функция регистрации использовала эту конфигурацию, чтобы определить, куда она должна регистрироваться (std {out, err}, syslog, какой-то другой файл, ...). Итак, что было бы лучшим способом, чтобы моя функция регистрации знала, куда она должна войти? Я думаю о том, чтобы сделать мою struct configuration * config глобальной переменной, объявленной как раз перед main(), и иметь extern struct configuration * config в log.h, чтобы log.c мог ее использовать. Но все продолжают говорить, что «глобальные переменные плохие, не используйте их», поэтому я хотел бы знать, есть ли лучший способ сделать это.

Ответы [ 2 ]

2 голосов
/ 28 июня 2011

Ну, глобальная конфигурация должна быть глобальной. Итак, я бы посчитал это исключением из правил. Однако в большинстве случаев вы можете указать struct как const. Это поможет сузить, какие модули изменяют глобальное состояние в будущем.

Для этого используйте глобальную функцию, которая выставляет указатель const вместо прямого extern. Фактически, вы также можете объявить конфигурацию struct как static. Это еще больше исключит неожиданный доступ.

0 голосов
/ 28 июня 2011

Если эта конфигурация ведения журнала применяется (и всегда будет) применяться ко всей системе в любое время, то это будет один из немногих случаев, когда можно использовать глобальную переменную, imho.Подумайте, нужна ли вам вся структура конфигурации глобально или просто значение конфигурации логирования.

...