Страницы

Поиск по вопросам

вторник, 9 октября 2018 г.

Include в заголовочных файлах

Заметил, что в разных проектах C++ программисты по разному используют директиву #include 1) В первом случае include по максимуму прописывают в h-файлах, но уже не пишут в cpp-файлах. Т.е. делаешь включение одного заголовочного файла, а он уже тянет все инклуды в себе. 2) Во втором случае наоборот, в h-файлах почти нет include, но все эти include спишут в cpp-файлах. При этом, если есть некие общие классы, то могут сделать так: В начале заголовочного файла ставят пустое объявление класса: class myClass;. Но этот include будет в cpp-файле. В заголовочном файле вообще нет объявления внешних типов данных. Но всё работает если в cpp-файле подключать заголовочные файлы с описанием классов перед подключением зависимых заголовочных файлов, т.е. важен порядок Вопросы у меня такие: Есть ли формальное наименование этих стилей компановки исходного кода? Как делать правильно, а как делать нельзя? Хочется изучить эту тему от и до. С чего начать?


Ответ

По моему опыту в большинстве случаев работает такой простой критерий: "минимальная" программа с любым из Ваших инклюд-файлов должна собираться. Например: // t.cpp #include "myincl1.h"
int main () { return 0; } это весь текст g++ t.cpp Компиляция должна успешно пройти. А в "myincl1.h" при этом желательно включать минимальное количество других .h файлов (как системных, так и собственных). И конечно, не забывайте писать #ifndef _MYINCL1_H #define _MYINCL1_H .... #endif // _MYINCL1_H в начале и конце своих .h Собственно, это требование к правильно написанному заголовочному файлу. Естественно, не должно быть никаких зависимостей от порядка включения файлов. Иногда для сокращения писанины удобно написать два-три "обобщающих" .h-файла, которые включают большинство собственных и системных .h, нужных для конкретной программы (используются во многих ее модулях).

Комментариев нет:

Отправить комментарий