Группировать заголовочные файлы в C и / или Objective-C - PullRequest
1 голос
/ 19 августа 2009

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

Рекомендуется ли эта практика, и если да, то имеет ли эта практика название? Я пытаюсь назвать заголовочные файлы чем-то, что явно говорит о том, что они являются импортом группы, и мне интересно, есть ли какое-либо соглашение?

Ответы [ 3 ]

6 голосов
/ 19 августа 2009

Все фреймворки Cocoa делают это: например, AppKit.framework содержит имя заголовка «AppKit.h», так что можно включить весь AppKit, используя #import <AppKit/AppKit.h>. Он просто содержит список из ~ 180 операторов импорта заголовка.

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

1 голос
/ 19 августа 2009

В случае Objective-C ситуация немного лучше с директивой #import, однако в C / C ++ это было бы очень плохо, так как любое изменение любого из интерфейсов, описанных в этих заголовках приведет к неизбежной перестройке всех файлов .c / .cpp, включая тот, который вы используете.
Если в какой-то момент вы обнаружите такие вещи, как TDD или хотя бы просто модульные тесты, вам придется бороться с потенциально очень сложными зависимостями, представленными таким заголовком.
Я лично рекомендовал бы избегать таких решений, если вы не знаете, что делаете.

0 голосов
/ 20 августа 2009

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

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

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

(В приведенном выше описании «заголовок» означает файл заголовка с расширением .h, а «включенный» относится к директиве препроцессора #include).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...