В чем разница между #include <filename>и #include "filename"? - PullRequest
2063 голосов
/ 22 августа 2008

В языках программирования C и C ++, в чем разница между использованием угловых скобок и использованием кавычек в операторе include следующим образом?

  1. #include <filename>
  2. #include "filename"

Ответы [ 31 ]

5 голосов
/ 27 августа 2014

#include <filename> используется при обращении к системному файлу. Это заголовочный файл, который можно найти в системных местах по умолчанию, таких как /usr/include или /usr/local/include. Для ваших собственных файлов, которые должны быть включены в другую программу, вы должны использовать синтаксис #include "filename".

4 голосов
/ 04 июня 2013

Простое общее правило заключается в использовании угловых скобок для включения заголовочных файлов, поставляемых с компилятором. Используйте двойные кавычки, чтобы включить любые другие файлы заголовков. Большинство компиляторов делают это так.

1.9 - Заголовочные файлы более подробно объясняют директивы препроцессора. Если вы начинающий программист, эта страница должна помочь вам понять все это. Я узнал об этом здесь, и я следил за этим на работе.

3 голосов
/ 02 апреля 2015
#include <filename>

используется, если вы хотите использовать заголовочный файл системы C / C ++ или библиотеки компилятора. Этими библиотеками могут быть stdio.h, string.h, math.h и т. Д.

#include "path-to-file/filename"

используется, когда вы хотите использовать свой собственный файл заголовка, который находится в папке вашего проекта или где-то еще.

Для получения дополнительной информации о препроцессорах и заголовке. Чтение C - препроцессоры .

2 голосов
/ 17 августа 2018

Форма 1 - #include "xxx"

Сначала ищет наличие заголовочного файла в текущем каталоге, откуда вызывается директива. Если он не найден, выполняется поиск в предварительно сконфигурированном списке стандартных системных каталогов.

Форма 2 - #include

Это ищет наличие заголовочного файла в текущем каталоге, откуда вызывается директива.


Точный список каталогов поиска зависит от целевой системы, того, как настроен GCC и где он установлен. Вы можете найти список каталогов поиска вашего компилятора GCC, запустив его с опцией -v.

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


По сути, форма "xxx" - это не что иное, как поиск в текущем каталоге; если не найдено, возвращается форма

1 голос
/ 03 октября 2018

Чтобы увидеть порядок поиска в вашей системе, используя gcc, основываясь на текущей конфигурации, вы можете выполнить следующую команду. Вы можете найти более подробную информацию об этой команде здесь

cpp -v /dev/null -o /dev/null

Apple LLVM версия 10.0.0 (clang-1000.10.44.2)
Цель: x86_64-apple-darwin18.0.0
Модель потока: posix УстановленныйDir: Библиотека / Разработчик / CommandLineTools / usr / bin
"/ Библиотека / Разработчик / CommandLineTools / usr / bin / clang" -cc1 -triple x86_64-apple-macosx10.14.0 -Wdeprecated-objc-isa-use -Werror = не рекомендуется-objc-isa-use -E -Disable-free -disable-llvm-верификатор -discard-value-names -main-имя-файла-null -mrelocation-model pic -pic-level 2 -mithread-model posix -mdisable-fp-elim -fno-strict-return -masm-verbose -munwind-tables -target-cpu penryn -dwarf-column-info -debugger-tuning = lldb -target-linker-version 409.12 -v -resource-dir /Library/Developer/CommandLineTools/usr/lib/clang/10.0.0 -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk -I / usr / local / include -fdebug-compilation-dir / Users / hogstrom -ferror-limit 19 -fmessage-length 80 -stack-protector 1 -fblocks -fencode-extended-block-signature -fobjc-runtime = macosx- 10.14.0 -fmax-type-align = 16 -fdiagnostics-show-option -fcolor-диагностика -traditional-cpp -o - -xc / dev / null
цель clang -cc1 версии 10.0.0 (clang-1000.10.44.2) по умолчанию x86_64-apple-darwin18.0.0 игнорируется несуществующий каталог "/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/local/include" игнорирование несуществующего каталога "/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/Library/Frameworks"
# include "..." поиск начинается здесь:
# include <...> поиск начинается здесь:
/ usr / local / include
/ Библиотека / Разработчик / CommandLineTools / usr / lib / clang / 10.0.0 / include
/ Библиотека / Разработчик / CommandLineTools / usr / include
/ Библиотека / Разработчик / CommandLineTools / SDKs / MacOSX10.14.sdk / usr / include
/ Библиотека / Разработчик / CommandLineTools / SDKs / MacOSX10.14.sdk / Система / Библиотека / Каркасы (каталог фреймворка)
Конец списка поиска.

0 голосов
/ 18 августа 2018

Существует два способа написания оператора #include. Это:

#include"filename"
#include<filename>

Значение каждой формы

#include"mylib.h"

Эта команда будет искать файл mylib.h в текущем каталоге, а также указанный список каталогов, как упомянуто во включенном пути поиска, который мог быть установлен.

#include<mylib.h>

Эта команда будет искать файл mylib.h только в указанном списке каталогов.

Путь поиска include - это не что иное, как список каталогов, в которых будет выполняться поиск включаемого файла. Разные компиляторы C позволяют задавать путь поиска различными способами.

0 голосов
/ 20 июня 2013

Порядок поиска файлов заголовков отличается. предпочитает сначала искать стандартные заголовки, а «XXX.h» сначала ищет файлы заголовков рабочей области.

0 голосов
/ 02 сентября 2008

Я считаю, что заголовки, включенные в двойные кавычки, будут искать в тех же системных путях, что и угловые скобки, если они не найдены в текущем каталоге.

0 голосов
/ 21 мая 2016

#include <filename>

найдет соответствующий файл из библиотеки C ++. это означает, что если у вас есть файл с именем hello.h в папке библиотеки C ++, #include <hello.h> загрузит его.

Но

#include "filename"

найдет файл в том же каталоге, где находится исходный файл.

Кроме того,

#include "path_to_file/filename"

найдет файл в каталоге, который вы ввели path_to_file.

0 голосов
/ 07 января 2017
  #include <filename>   (1)     
  #include "filename"   (2)

#include включает исходный файл, идентифицируемый по имени файла, в текущий исходный файл в строке сразу после директивы.

Первая версия директивы ищет только стандартные включения каталоги. Стандартная библиотека C ++, а также стандартная библиотека C, неявно включен в стандартные каталоги включения. Стандарт каталоги include могут контролироваться пользователем через компилятор опции.

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

В случае, если файл не найден, программа некорректно сформирована.

...