Разница между угловыми скобками <> и двойными кавычками "", включая заголовочные файлы в С++?

Возможный дубликат:
В чем разница между #include <filename> и #include "имя файла" ?

В чем разница между угловыми скобками < > и двойными кавычками " ", включая заголовочные файлы в С++?

Я имею в виду, какие файлы должны быть включены, например: #include <QPushButton> и какие файлы должны быть включены, например: #include "MyFile.h"???

Ответ 1

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

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

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

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

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

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

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

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

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

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

Ответ 2

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

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