C ++: # включить поиск файлов? - PullRequest
3 голосов
/ 15 декабря 2009

Этот документ MSDN цитаты:

искать включаемые файлы в том же каталог файла, который содержит оператор #include и затем в каталоги любых файлов, которые включить (#include) этот файл

Подождите, что?
Что это на самом деле означает (смелый материал)?

Ответы [ 3 ]

5 голосов
/ 15 декабря 2009

Это, вероятно, означает, что если foo/bar/baz.c включает ../bog/bog.h, а последний содержит

#include "fix.h"

это найдет foo/bar/fix.h. Другими словами, он просматривает каталог, в котором содержится C-файл, содержащий заголовок, содержащий include. Очистить? :)

Итак, макет файла, представленный как великолепная графика ASCII, выглядит так:

  foo/
  |
  +-bar/
  | |
  | +-baz.c
  | |
  | +-fix.h
  |
  +-bog/
    |
    +-bog.h

И bog.h затем может найти fix.h в каталоге-родственнике foo.

1 голос
/ 15 декабря 2009

Ознакомьтесь с документом MSDN, приведенным ниже.

Если имя файла, заключенное в двойные кавычки, является неполной спецификацией пути, препроцессор сначала ищет каталог «родительского» файла. Родительский файл - это файл, содержащий директиву #include. Например, если вы включите файл с именем file2 в файл с именем file1, file1 будет родительским файлом.

Включаемые файлы могут быть «вложенными»; то есть директива #include может появиться в файле с именем другой директивы #include. Например, файл2 выше может включать файл3. В этом случае file1 по-прежнему будет родительским для file2, но будет «прародителем» file3.

Когда вложенные файлы вложены и при компиляции из командной строки, поиск каталогов начинается с каталогов родительского файла, а затем продолжается по каталогам любых файлов-прародителей. Таким образом, поиск начинается относительно каталога, содержащего источник, обрабатываемый в данный момент. Если файл не найден, поиск перемещается в каталоги, указанные параметром компилятора / I. Наконец, каталоги, указанные в переменной среды INCLUDE, ищутся.

1 голос
/ 15 декабря 2009

Я думаю, это говорит о том, что если у вас есть файл foo.h, который включен в некоторые другие файлы bar.cpp, baz.cpp и т. Д., А затем используется оператор #include "somefile.h" в foo.h, то компилятор также будет искать в каталоги bar.cpp и baz.cpp для него.

...