В чем разница между <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, если размещенные каталоги не находятся в пути поиска компилятора.
Нижняя строка: заголовки с "", системные заголовки с < >