Включить заголовки в заголовочный файл? - PullRequest
9 голосов
/ 21 апреля 2010

У меня есть несколько библиотек (библиотека геометрии, библиотека связанных списков и т. Д.). Я хочу сделать заголовочный файл, чтобы включить их все в один lib.h. Могу ли я сделать что-то вроде этого:

#ifndef LIB_H_
#define LIB_H_

#include <stdio.h>
#include <stdlib.h>
#include <linkedlist.h>
#include <geometry.h>
....

#endif

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

Ответы [ 3 ]

17 голосов
/ 21 апреля 2010

Да, это будет работать.

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

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

5 голосов
/ 21 апреля 2010

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

Как уже отмечалось, вы должны организовать заголовки в логические группировки.

0 голосов
/ 27 октября 2016

«Правильный путь» для включения (в А)

  • ничего не делать, если: A вообще не ссылается на B
  • ничего не делать, если: единственная ссылка на B находится в объявлении друга
  • форвард объявляет B, если: A содержит указатель B или ссылку: B* myb;
  • forward Объявление B, если: одна или несколько функций имеют B объект / указатель / ссылку в качестве параметра или в качестве возвращаемого типа: B MyFunction(B myb);
  • #include "b.h", если: B является родительским классом A
  • #include "b.h" если: A содержит объект B: B myb;

Из статьи cplusplus.com вы должны окончательно прочитать

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