реклама на сайте
подробности

 
 
> include в хидере - всё таки это доро или зло?, Есть противоположные мнения, хочется понять их
Cosmojam
сообщение Oct 10 2013, 22:00
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 311
Регистрация: 12-01-11
Из: Калининград (Koenigsberg)
Пользователь №: 62 182



Речь идёт про Си. Си++ не трогаем, хотя догадываюсь что аргументы там те же.

Существует мнение что писать в .h все необходимые инклюды - это плохо. Единственное подтверждение почему это плохо что мне удалось найти - время компиляции увеличивается. Многократные инклюды одного хидера лечатся очень просто с помощью ifndef/define и как аргумент не рассматриваются т.к. без защиты от множественных инклюдов в любом проекте где один хидер используется более чем в 1 .c файле будут проблемы.

Мой аргумент почему это стоит делать: Хидер - это заголовок модуля, определяющий его публичный интерфейс. Логично расположить в нём всё необходимое для работы модуля, а в .с файле инклюдить только один этот заголовок т.о. отделив реализацию от интерфейса. Улучшается наглядность т.к. сразу в хидере видно зависимости от других модулей.
Погуглив можно найти мнение со ссылкой на NASA C coding standard где написано
Цитата
(4)
The unit header file shall contain #include statements for all other headers required by the unit
header. This lets clients use a unit by including a single header file.


Так как же "правильнее"? NASA не дураки ведь. Так почему существуют противоположные мнения?


--------------------
typedef enum { no, yes, maybe } bool; | блог тут
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
XVR
сообщение Oct 11 2013, 07:43
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Cosmojam @ Oct 11 2013, 02:00) *
Существует мнение что писать в .h все необходимые инклюды - это плохо.
Нет такого мнения. Или это мнение закоренелых лентяев (со стороны тех, кто пишет), или мазохистов (со стороны тех, кто это потом использует) rolleyes.gif

Есть мнение, что 'необходимых инклюдов' должно быть как можно меньше (как это делается, вам тут уже писали)

Хочу только добавить еще один прием - при написании программы (не библиотеки, это важно!) можно часто используемые независимые инклюды (и не только их), собрать в один общий инклюд и включать его во все единицы компиляции первым (например это обычная практика в VS с файлом StdAfx.h, хотя и по другой причине laughing.gif ). В этом случае большое количество однотипных инклюдов в конкретные *.h конкретных модулей можно не включать.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Cosmojam   include в хидере - всё таки это доро или зло?   Oct 10 2013, 22:00
- - AlexandrY   Цитата(Cosmojam @ Oct 11 2013, 01:00) Сущ...   Oct 11 2013, 05:47
|- - halfdoom   Цитата(AlexandrY @ Oct 11 2013, 08:47) В ...   Oct 11 2013, 06:12
|- - demiurg_spb   Немного offtopic... Чтобы не слишком много пережи...   Oct 11 2013, 06:34
- - Сергей Борщ   QUOTE (Cosmojam @ Oct 11 2013, 01:00) Хид...   Oct 11 2013, 06:53
|- - Cosmojam   Цитата(Сергей Борщ @ Oct 11 2013, 09:53) ...   Oct 11 2013, 10:34
||- - Сергей Борщ   QUOTE (Cosmojam @ Oct 11 2013, 13:34) Ок,...   Oct 11 2013, 10:58
|- - ar__systems   Цитата(Сергей Борщ @ Oct 11 2013, 01:53) ...   Oct 13 2013, 20:35
- - _Pasha   Инклюды в хедере - вне добра и зла и их применение...   Oct 11 2013, 07:01
|- - AlexandrY   Цитата(_Pasha @ Oct 11 2013, 10:01) Инклю...   Oct 11 2013, 08:04
|- - Сергей Борщ   QUOTE (AlexandrY @ Oct 11 2013, 11:04) За...   Oct 11 2013, 08:17
|- - AlexandrY   Цитата(Сергей Борщ @ Oct 11 2013, 11:17) ...   Oct 11 2013, 08:38
- - kolobok0   Цитата(Cosmojam @ Oct 11 2013, 02:00) ..С...   Oct 11 2013, 12:11
- - igorle   У нас на фирме приняты правила, совпадающие с НАСА...   Oct 11 2013, 12:12
|- - Сергей Борщ   QUOTE (igorle @ Oct 11 2013, 15:12) У нас...   Oct 11 2013, 13:06
- - Cosmojam   Ок, это я не правильно понял тот абзац из стандарт...   Oct 11 2013, 15:18


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 14:36
Рейтинг@Mail.ru


Страница сгенерированна за 0.01388 секунд с 7
ELECTRONIX ©2004-2016