Это зависит от компилятора. Тем не менее, в общем случае использование "
отдает приоритет заголовкам в текущем рабочем каталоге над системными заголовками. <>
обычно используется для системных заголовков. От до спецификации (раздел 6.10.2):
Директива предварительной обработки вида
# include
новая строка выполняет поиск в последовательности определенных реализацией мест заголовка, однозначно идентифицируемого указанной последовательностью между разделителями
<
и>
, и вызывает замену этой директивы всем содержимым. заголовка. То, как указываются места или идентифицируется заголовок, определяется реализацией.Директива предварительной обработки вида
# include "q-char-sequence" новая строка
вызывает замену этой директивы всем содержимым исходного файла, идентифицированного указанной последовательностью между разделителями
"
. Именованный исходный файл ищется способом, определяемым реализацией. Если этот поиск не поддерживается, или, если поиск завершился неудачно, директива повторно обрабатывается, как если бы она читала# include
новая строка с идентичной содержащейся последовательностью (включая
>
символов, если есть) из оригинала директива.
Итак, большинство компиляторов, используя ""
сначала проверяют ваш локальный каталог, и, если он не находит совпадения, затем переходит к проверке системных путей. Использование <>
запускает поиск по системным заголовкам.
Когда вы используете угловые скобки, компилятор ищет файл в списке включаемых путей. Когда вы используете двойные кавычки, он сначала выполняет поиск в текущем каталоге (то есть в каталоге, где находится компилируемый модуль), и только затем он будет искать в списке путей включения.
Итак, по соглашению, вы используете угловые скобки для стандартных включений и двойные кавычки для всего остального. Это гарантирует, что в (не рекомендуемом) случае, когда у вас есть локальный заголовок с тем же именем, что и у стандартного заголовка, в каждом случае будет выбран правильный.