C ++ - #include "имя файла" - PullRequest
       2

C ++ - #include "имя файла"

1 голос
/ 22 января 2011

В в этом руководстве упоминается следующее о #include "filename":

# include "filename" указывает компилятору искать файл в каталоге, содержащемисходный файл делает #include. Если это не удастся, он будет действовать так же, как и в случае с угловыми скобками .

Что подразумевается под предложением с жирным шрифтом?

Спасибо.

Ответы [ 2 ]

10 голосов
/ 22 января 2011

Жирный бит просто означает, что, если файл, указанный в кавычках, не может быть найден с использованием метода ", он вернется к методу <>.


Я должен упомянуть, чтоНемного о том, где он ищет файлы include, на самом деле неверно.В обоих случаях (кавычки и угловые скобки) местоположения поиска определяются реализацией.

Из раздела lex.header:

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

Далее следует раздел 16.2:


Директива #include должна идентифицировать заголовок или исходный файл, который может быть обработан реализацией.

Директива предварительной обработки вида

# include < h-char-sequence> new-line

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

Директива предварительной обработки вида

# include " q-char-sequence" new-line

вызывает замену этой директивы всем содержимым идентифицированного исходного файла.по указанной последовательности между разделителями ".Именованный исходный файл ищется в соответствии с реализацией.Если этот поиск не поддерживается или поиск не выполняется, директива обрабатывается повторно, как если бы она читала

# include < h-char-sequence> new-line

с идентичной содержащейся последовательностью (включая > символов, если таковые имеются) из исходной директивы.


Так что утверждение "... tells the compiler to look for the file in directory containing the source file doing the #include ..." неверно.В обоих случаях все зависит от реализации, как он находит файлы.

Сказав это, все остальное правильно.Если метод, используемый типом ", не находит заголовок, тогда используется метод, используемый типом <>.Вот и все, что означает жирный бит.

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

4 голосов
/ 22 января 2011

Хотя точные детали зависят от реализации, существует несколько распространенных практик. В большинстве распространенных компиляторов использование кавычек #include "filename.h" ищет текущий каталог по умолчанию. Используя угловые скобки #include <filename.h>, ищет системные библиотеки каталогов. Это говорит о том, что если в текущем каталоге нет нужного файла, он будет искать системные каталоги.

Обратите внимание, что некоторые компиляторы могут отличаться, и сам ваш компилятор может иметь опции для изменения этих каталогов. Существует также вероятность того, что системные заголовки на самом деле не существуют, но компилятор напрямую распознает #include <foo.h>, чтобы включить определенные встроенные определения.

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