#import с использованием угловых скобок ‹› и кавычек

Мне интересно, что решает, разрешено ли вам использовать <Header.h> или "Header.h" при импорте файлов в Objective-C. До сих пор я наблюдал, что вы используете кавычки "" для файлов в вашем проекте, для которых у вас есть источник реализации, и угловые скобки <>, когда вы ссылаетесь на библиотеку или фреймворк.

Но как именно это работает? Что мне нужно сделать, чтобы мои собственные классы использовали скобки? Прямо сейчас Xcode не позволяет мне делать это для моих собственных заголовков.

Кроме того, просматривая заголовки некоторых фреймворков, я вижу, что заголовки ссылаются друг на друга с помощью <frameworkname/file.h>. Как это работает? Он очень похож на пакеты в Java, но, насколько я знаю, в Objective-C нет такого понятия, как пакет.


person quano    schedule 25.06.2009    source источник


Ответы (9)


Objective-C имеет это общее с C / C ++; форма в кавычках предназначена для "локальных" включений файлов (необходимо указать относительный путь от текущего файла, например #include "headers/my_header.h"), а форма угловых скобок предназначена для "глобальных" включений - тех, которые находятся где-то в переданном пути включения компилятору (например, #include <math.h>).

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

Дополнительную информацию см. На этой странице MSDN.

person Mark Pim    schedule 25.06.2009
comment
У меня только что возникла проблема с проектом GitHub, в котором AFNetworking указывается как #import ‹AFNetworking / AFHTTPRequestOperationManager.h›, поэтому мне пришлось использовать $ (SRCROOT) / lib / AFNetworking в качестве пути поиска заголовка. В этой папке находится еще одна папка с именем AFNetworking. Таким образом, импорт с угловыми скобками находит ее по этому пути. Обычно #import AFHTTPRequestOperationManager.h будет работать, но для этого проекта он просто ссылается на него по-другому. - person Brennan; 08.12.2013
comment
Похоже, причина та же, что и для C / C ++. Угловая скобка (обозначается символом ‹›) указывает на поиск файла, отличного от текущего локального каталога, тогда как кавычки (обозначаемые символом) указывают на поиск файла в текущем локальном каталоге. - person Jayprakash Dubey; 21.03.2018
comment
Ссылка в конце ответа устарела. - person Pang; 22.07.2020

В языке C принято, что файлы заголовков в скобках <> ищутся в «системных» каталогах, а "" - в пользовательских или локальных каталогах.

Думаю, определение системного и локального немного расплывчато. Я считаю, что он просматривает системные каталоги по пути include или CPPFLAGS для ‹header.h›, а локальный каталог или каталог, указанный с помощью -I to compiler, ищет файлы header.h.

Я предполагаю, что это работает аналогично для Objective-C.

person stefanB    schedule 25.06.2009

Чтобы импортировать свои собственные классы с помощью «‹> », вы должны поместить файлы заголовков (* .h) в папку lib компилятора или установить ПЕРЕМЕННЫЕ СИСТЕМЫ в папку lib.

person Rodrigo Reis    schedule 25.06.2009

Или установите Always Search User Path на YES, чтобы можно было использовать угловые скобки.

person Ida88    schedule 28.04.2017

С угловыми скобками напр. <Foundation/Foundation.h> вы импортируете системные файлы.

Вы используете двойные кавычки "Person.h" для импорта локальных файлов (файлов, которые вы создали) и для указания компилятору, где их искать.

person soupwaylee    schedule 22.03.2019

<Name.h> - Angle brackets сообщает препроцессору, что нужно искать в специальных предварительно назначенных системных каталогах. Например, вы импортируете системные заголовки, такие как <UIKit/UIKit.h>, или добавленные фреймворки.

"Name.h" - Quotation marks указывает препроцессору искать в текущем каталоге. Если заголовок не найден, препроцессор пытается использовать <Name.h>. Обычно вы должны использовать его с файлами вашего проекта

person yoAlex5    schedule 05.12.2019

Просто наткнулся на ту же проблему, есть 2 типа путей поиска - это Xcode:

User Header Search Paths
Header Search Paths

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

person fatihk    schedule 15.06.2015

Если это проект Xcode и вы хотите включить его в структуру, откройте файл заголовка, который вы хотите включить. Затем откройте крайнюю правую вкладку Xcode и в разделе «Целевое членство» щелкните фреймворк, из которого вы хотите, чтобы ваш файл был доступен.

например Если ваша структура - AlphaTools, а ваш заголовок - AceHeader, тогда вы выберете AlphaTools для целевого членства, чтобы получить доступ к < AlphaTools/AceHeader.h

person Willy    schedule 06.05.2021

ЧТО ТАКОЕ ФАЙЛ ЗАГОЛОВКИ? Заголовочные файлы содержат определения функций и переменных, которые могут быть включены в любую программу C с помощью инструкции препроцессора #include. Стандартные файлы заголовков поставляются с каждым компилятором и охватывают ряд областей, включая обработку строк, математику, преобразование данных, печать и чтение переменных. Ex- #include он содержит информацию о вводе, например, scanf (), и о выходе, например, о функции printf () и т. Д. В компиляторе.

ВКЛЮЧАЮТ

1) #INCLUDE: - Это препроцессор, который обрабатывает перед выполнением основной функции. Основная работа препроцессора - инициализировать среду программы, то есть программу с файлом заголовка. 2) .h: - (Заголовочный файл) Заголовочный файл - это файл с расширением .h, который содержит объявления функций C и определения макросов и должен использоваться несколькими исходными файлами. В) Есть два типа файлов заголовков: файлы, которые пишет программист, и файлы, которые поставляются с вашим компилятором? A) В угловых скобках Форма угловых скобок предназначена для «глобальных» включений - тех, которые находятся где-то в пути включения, переданном компилятору (например, #include). Он используется для использования библиотечной функции, которая уже полностью определена в компиляторе. В языке C соглашение заключается в том, что файлы заголовков в скобках ‹> ищутся в 'системных' каталогах. B) Кавычки: - форма в кавычках« header.h »предназначена для« локальных »включений файлов (вам необходимо указать относительный путь из текущий файл, например, #include "headers / my_header.h"). В C принято соглашение, что файлы заголовков в "" ищутся в пользовательских или локальных каталогах. В нем один файл для включения в другой. (ФАЙЛ ВКЛЮЧЕНИЕ). Его можно использовать в двух случаях: Случай 1. Если у нас очень большая программа, код лучше всего разделить на несколько разных файлов, каждый из которых содержит набор связанных функций. Случай 2: Есть некоторые функции и микроопределения, которые нам нужны максимум во всех программах, которые мы пишем. Бывший

person anitesh975    schedule 06.12.2014