Я работаю над небольшим программным проектом, который я надеюсь выпустить в будущем как открытый исходный код, поэтому я надеялся собрать мнения о том, каковы наилучшие в настоящее время практики в отношении этой проблемы.
Само приложение является процедурным, не объектно-ориентированным (мне нет необходимости инкапсулировать функции рендеринга или функции обработки событий в классе), но некоторые аспекты объекта Приложение в значительной степени ориентировано на объект (например, консоль сценариев, которая в значительной степени зависит от ОО). OO-аспекты кода имеют стандартные файлы object.cpp
и object.h
.
Что касается процедурной части, мой код разделен на различные файлы (например, main.cpp
, render.cpp
, events.cpp
), каждый из которых может иметь некоторые глобальные переменные, специфичные для этого файла. У меня также есть соответствующие заголовочные файлы для каждого, определяющие все функции и переменные (как extern
), которые я хочу быть доступными из других файлов. Затем я просто #include
правильный заголовок, когда мне нужен доступ к этой функции / переменной из другого исходного файла.
Сегодня я понял, что у меня также может быть другой вариант: создать один заголовочный файл globals.h
, где я мог бы определить все глобальные переменные (как снова extern
) и функции, которые потребуются за пределами конкретного исходного файла. Затем я мог бы просто #include
этот файл во всех исходных файлах (вместо каждого отдельного заголовочного файла, как я делаю сейчас). Кроме того, используя этот метод, если мне нужно было преобразовать переменную / функцию в глобальную (вместо локальной), я мог бы просто добавить запись в файл заголовка.
Вопрос : Лучше ли использовать соответствующий файл заголовка для каждого .cpp
файла (и определить переменные / функции, которые я хочу, чтобы они были глобально доступны в этих заголовках ) или использовать один заголовочный файл для объявления всех глобально доступных переменных / функций?
Еще одно быстрое обновление, большинство (но не все ) глобальных переменных используются как таковые, потому что мое приложение является многопоточным.