Взаимное включение заголовочных файлов - PullRequest
1 голос
/ 19 ноября 2010

Допустим, у меня есть заголовочный файл с именем inclusions.h, в котором есть все #include <...> для моего проекта.inclusions.h включает в себя еще один заголовочный файл с именем settings.h, где можно изменять различные константы.

Если #include <math.h> в inclusions.h, будет ли settings.h иметь доступ и к математической библиотеке?Или я должен #include <math.h> в settings.h также?

Ответы [ 3 ]

5 голосов
/ 19 ноября 2010

Если файл math.h включен до файла settings.h, файл settings.h также должен иметь доступ к файлу math.h.Но чтобы обеспечить доступ (и указать зависимости), вы должны включить файлы там, где они нужны, также в math.h.

3 голосов
/ 19 ноября 2010

Зависит от порядка включений. #include - это директива препроцессора, которая просто работает путем текстовой подстановки. Итак, если в inclusions.h у вас есть:

#include <math.h>
#include <settings.h>

настройки "можно увидеть" математику. Если у вас есть:

#include <settings.h>
#include <math.h>

не может. Но: что произойдет, если вы использовали settings.h в другом месте без , включая math.h раньше? Поэтому, в конце, попробуйте сделать каждый файл включения независимым.

1 голос
/ 19 ноября 2010

В этом случае, как отметили другие, в зависимости от порядка включения он может быть доступен. Это потому, что эти исходные файлы являются частью одной единицы перевода (источник + включает в основном), поэтому, если <math.h> предшествует "settings.h", он может быть доступен для просмотра. Однако, если настройки стали частью другой единицы перевода или если вы решили переместить определенные включения, это может измениться. Чтобы быть «безопасным», вы должны просто включить все заголовочные файлы, которые необходимы для того, чтобы файл имелся в этом файле.

...