Подтвердить что ты не робот

Директива #include: относительно того, где?

Я просмотрел язык программирования С++, чтобы попытаться найти ответ на этот вопрос. Когда я #include "my_dir/my_header.hpp" в заголовке, где он ищет этот файл? Это относительно заголовка относительно исходного файла, который его включил, или что-то еще?

4b9b3361

Ответ 2

Он относится как к текущему исходному файлу, так и к любым заданным маршрутам поиска (-I для gcc).

Ответ 3

Это зависит от того, какой синтаксис вы используете в директиве #include:

#include "path-spec"
#include <path-spec>

Цитированная форма: эта форма указывает препроцессору искать файлы include в том же каталоге файла, который содержит оператор #include, а затем в каталогах любых файлов, которые включают (#include) этот файл. Затем препроцессор выполняет поиск по пути, указанному параметром компилятора /I, а затем по путям, указанным переменной среды INCLUDE.

Форма с угловыми скобками: эта форма инструктирует препроцессор для поиска включенных файлов сначала по пути, указанному параметром компилятора /I, а затем при компиляции из командной строки по пути, указанному переменной среды INCLUDE.

Спецификация пути - это имя файла, которому предшествует спецификация каталога. Имя файла должно содержать имя существующего файла. Синтаксис спецификации пути зависит от операционной системы, на которой скомпилирована программа.

Эта информация должна быть в документации для вашей конкретной справки по препроцессору С++, приведенная выше взята из этой статьи в MSDN, которая содержит больше информации о предмет.

Ответ 4

Полный путь поиска может зависеть от компилятора. В Visual Studio:

(...) инструктирует препроцессор искать файлы include в том же каталоге файла, который содержит оператор #include, а затем в каталогах любых файлов, которые включают (#include) этот файл. Затем препроцессор выполняет поиск по пути, указанному параметром компилятора /I, а затем по путям, указанным переменной среды INCLUDE.

Ответ 5

Определена его реализация. Эти #include "my_dir/xxy.hpp" в файле (например, foo.h) относятся к файлу (foo.h и my_dir будут на одном уровне в иерархии каталогов). С некоторыми (большинством?) Компиляторов вы можете использовать флаг для использования этих < > (#include

Я знаю, что gcc/g++ предоставляет флаг -I. Таким образом, вы можете использовать g++ -I/home [...]  что файл xxy.hpp находится в каталоге /home/my _dir/. Я уже не использовал какой-либо другой компилятор C/С++.

Ответ 6

для версии GCC <= 3.0, форма угловой скобки не создает зависимость между включенным файлом и включенным. Поэтому, если вы хотите, чтобы ваш make файл автоматически генерировал зависимости, вы должны использовать цитированную форму для файлов, которые должны быть включены в дерево зависимостей.