В чем разница между <stdio.h> и "stdio.h"?

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

В обоих случаях нет ошибки... Есть ли разница между ними?

Ответы

Ответ 1

<stdio.h> выполняет поиск в стандартных ячейках библиотеки C, тогда как "stdio.h" выполняет поиск в текущем каталоге.

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

Ответ 2

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

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

Ответ 3

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

Что касается того, почему оба из них работают на вас, возможно, ваш компилятор также ищет имя файла в заголовках библиотеки, если он не нашел его среди ваших.

Ответ 4

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

Ответ 5

В случае "..." компилятор сначала ищет файл заголовка в вашем локальном каталоге, где находится ваш .c файл

в то время как в случае <...> компилятор ищет только в папке заголовочного файла

Ответ 6

#include <something.h> предназначен для заголовков системы, а #include "something.h" - для заголовков вашей собственной программы. Заголовки систем ищутся в обычных системных каталогах (и те, которые включены с аргументом -I), которые ваши заголовки ищутся в текущем каталоге, а затем в тех же местах, что и заголовки системы.

см. http://gcc.gnu.org/onlinedocs/gcc-2.95.3/cpp_1.html#SEC6

Ответ 7

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

Ответ 8

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

Ответ 9

<stdio.h> относится к заголовку (а не к файлу заголовка)
"stdio.h" относится к исходному файлу.

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

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

Ответ 10

Разница заключается в том, что заголовочные файлы, созданные разработчиком, заключены в "". Файлы заголовков, которые уже находятся в системе, заключены в < > . Даже заголовкам < > нужна директива -I, если размещенные каталоги не находятся в пути поиска компилятора.

Нижняя строка: заголовки с "", системные заголовки с < >