Можно создать дубликат:
what is the difference between #include <filename> and #include “filename”В чем разница между <stdio.h> и "stdio.h"?
В обоих случаях нет никакой ошибки ... Есть ли разница между ними?
Можно создать дубликат:
what is the difference between #include <filename> and #include “filename”В чем разница между <stdio.h> и "stdio.h"?
В обоих случаях нет никакой ошибки ... Есть ли разница между ними?
I случай «» компилятором первый поиск заголовочный файл в локальном каталоге, где файл .c представляет
в то время как в случае <> компилятор искать только в заголовке папку
Вторая версия указан для поиска сначала в определенном месте реализации, а затем, если файл не найден, выполните поиск в том же месте, что и версия <...>
, которая выполняет поиск по путям, обычно указанным в командной строке -I
, и встроенными путями включения (указывая на расположение стандартных библиотек и системных заголовков).
Обычно реализации определяют, что местоположение должно быть относительно местоположения файла включения.
<stdio.h>
выполняет поиск в стандартных ячейках библиотеки C, тогда как "stdio.h"
выполняет поиск в текущем каталоге.
В идеале вы бы использовали <...>
для стандартных библиотек C и "..."
для библиотек, которые вы пишете и присутствуют в текущем каталоге.
#include <something.h>
предназначен для системных заголовков, а #include "something.h"
предназначен для заголовков вашей собственной программы. Системные заголовки ищутся в обычных системных каталогах (и те, которые включены в аргумент -I
), которые ищутся в ваших заголовках в текущем каталоге, а затем в тех же местах, что и системные заголовки.
Для составителей, которые я использовал, «...» начинает поиск включаемого файла в том же каталоге, что и исходный файл, который компилируется, то включать путь. Включает в себя: < ...> начало в путь включения, пропуская текущую матрицу, если она не включена в путь включения.
Обычно стандартные заголовочные файлы заключены <> и конкретные файлы других пользовательских предписанный в технических заданиях с ".
<> сообщить компилятору искать файл в заголовках библиотек и„“сказать ему, чтобы посмотреть вокруг среди заголовков вашего приложения.
А почему обе из них работает для вас, может быть, ваш компилятор также ищет имя файла в заголовках библиотеки в случае, если он не нашел один среди твоих.
<stdio.h>
относится к заголовок (не заголовочный файл)
"stdio.h"
относится к исходному файлу.
Заголовки не обязательно должны быть физически реализованы; (как правило, заголовки представляют собой файлы в определенных каталогах)
Когда директива использует "
, исходный файл выполняется в соответствии с реализацией и, если не найден, эта директива перерабатывается как если бы он был написан с <
и >
в первую очередь.
Я смущен формулировками C99. Означает ли это, что '#include
Читая его снова, он, кажется, не говорит, что стандартные заголовки представляют собой набор заголовков исключительно. Таким образом, могут быть реализованы определенные заголовки, такие как заголовки столбцов и т. Д. –
@litb: Я думаю, что 'unistd.h' является заголовком, если реализация (или в этом случае стандарт POSIX, реализация которой также реализуется) говорит, что это заголовок. Это не стандартный заголовок, но я не думаю, что стандарт C99 запрещает реализациям разрешать заголовки, отличные от стандартных. Я не могу найти нигде, где это явно разрешено, просто текст о сопоставлении идентификаторов с заголовками, определяемых реализацией. –
Разница заключается в том, что заголовочные файлы, созданные разработчиком, заключены в "". Файлы заголовков, которые уже находятся в системе, заключены в <>. Даже заголовкам <> нужна директива -I, если расположенные каталоги не находятся в пути поиска компилятора.
Итог: Ваши заголовки с «», система заголовков с <>
Вы используете #include, когда вы хотите сказать: «искать файл с таким именем в системе включают в себя каталог». Вы используете #include «doublequoted», когда хотите сказать: «Ищите файл с этим именем в каталоге include моего собственного приложения, однако, если он не может быть найден, загляните в каталог include системы».
Вы имеете в виду, если мой * .c файл не находится в каталоге, в котором присутствует стандартная библиотека C, тогда будет ошибка? – Parikshita
нет, потому что он все равно выглядит. И я сомневаюсь, что ваш файл c находится в стандартной папке C в любом случае. –
Нет. Если вы используете '' ... "', единственное различие заключается в том, что ваш файл '.h' будет искать в текущем каталоге, а также в стандартных ячейках библиотеки C. –