Различие между угловой скобкой <> и двойными кавычками, “” в то время как включая заголовочные файлы в C++? [дубликат]

229
задан Community 23 May 2017 в 02:10
поделиться

2 ответа

Это зависит от компилятора. Тем не менее, в общем случае использование " отдает приоритет заголовкам в текущем рабочем каталоге над системными заголовками. <> обычно используется для системных заголовков. От до спецификации (раздел 6.10.2):

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

  # include  новая строка

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

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

  # include "q-char-sequence" новая строка

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

  # include  новая строка

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

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

243
ответ дан 23 November 2019 в 03:44
поделиться

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

Итак, по соглашению, вы используете угловые скобки для стандартных включений и двойные кавычки для всего остального. Это гарантирует, что в (не рекомендуемом) случае, когда у вас есть локальный заголовок с тем же именем, что и у стандартного заголовка, в каждом случае будет выбран правильный.

45
ответ дан 23 November 2019 в 03:44
поделиться