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