Программирование ARM #include: угловые скобки или двойные кавычки, в чем разница? Sat, December 07 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


#include: угловые скобки или двойные кавычки, в чем разница? Печать
Добавил(а) microsin   

На языках C/C++ оба варианта использования директивы #include, и в двойных кавычках, и в угловых скобках, определяют путь до подключаемого файла. Различия в их обработке зависит от компилятора. В общем случае двойные кавычки "" приоритизируют поиск заголовка относительно текущего каталога проекта. Угловые скобки приоритизируют начало поиска относительно пути, переданного компилятору опцией указания пути поиска заголовков (для GCC это опция командной строки -I).

Из руководства "6.10.2 Source file inclusion" [3] (см. перевод во врезке ниже) не становится понятнее, как реально обрабатываются двойные кавычки и угловые скобки в директиве #include. Все выглядит, как будто никакой разницы в общем нет.

Директива препроцессора в форме:

#include < h-char-sequence> new-line

выполняет поиск заголовков в определенных реализацией местах. Место поиска уникально указывается последовательностью символов между разделителями < and >, и приводит к полной подстановке найденного по этому пути содержимого файла заголовка в то место, где встретилась директива #include. Способ указания мест или определения заголовка определяется реализацией компилятора.

Директива препроцессора в форме:

#include "q-char-sequence" new-line

приводит к замене этой директивы содержимым файла, найденного по указанному пути, составленного из символов между разделителями ". Как производится поиск файла, определяется реализацией компилятора. Если этот вид поиска не поддерживается, или поиск закончился неудачей, то эта директива обрабатывается так же, как если бы она выглядела как:

#include < h-char-sequence> new-line

Однако существуют общепринятые правила, когда следует использовать угловые скобки, а когда двойные кавычки в директиве #include.

1. Угловые скобки применяют для поиска так называемых стандартных заголовков (системных библиотек), например stdint.h, stdout.h, stdbool.h и т. п. Путь их поиска начинается от общих настроек среды разработки, и обычно передается компилятору через опцию командной строки (например, для компилятора gcc это -I).

2. Двойные кавычки обычно применяют для поиска заголовочных файлов, относящегося к проекту. Их поиск начинается от места расположения файла исходного кода, где встретилась директива #include, или от корневого каталога проекта (каталога, из которой запускался компилятор).

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

[Ссылки]

1. Difference between quotation marks (") and angle brackets < > while including files site:reddit.com.
2. Difference between angle bracket < > and double quotes " " while including header files in C++? site:stackoverflow.com.
3. Source file inclusion site:cppreference.com.

 

Добавить комментарий


Защитный код
Обновить

Top of Page