Заметил, что в разных проектах 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, нужных для конкретной программы (используются во многих ее модулях).
Комментариев нет:
Отправить комментарий