#import с использованием угловых скобок <> и кавычек «»

120

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

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

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

quano
источник

Ответы:

122

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

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

См. Эту страницу MSDN для получения дополнительной информации.

Марк Пим
источник
1
У меня только что возникла проблема с проектом GitHub, который ссылается на AFNetworking как на #import <AFNetworking / AFHTTPRequestOperationManager.h>, поэтому мне пришлось использовать $ (SRCROOT) / lib / AFNetworking в качестве пути поиска заголовка. В этой папке находится еще одна папка с именем AFNetworking. Таким образом, импорт с угловыми скобками находит ее по этому пути. Обычно #import "AFHTTPRequestOperationManager.h" будет работать, но для этого проекта он просто ссылается на него иначе.
Бреннан
Похоже, причина та же, что и для C / C ++. Угловая скобка (обозначается символом <>) указывает на поиск файла, отличного от текущего локального каталога, тогда как кавычки (обозначаемые символом «») указывают на поиск файла в текущем локальном каталоге.
Jayprakash Dubey
Ссылка в конце ответа устарела.
Панг,
14

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

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

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

stefanB
источник
6

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

Родриго Рейс
источник
2

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

Ida88
источник
1

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

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

soupwaylee
источник
1

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

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

yoAlex5
источник
0

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

User Header Search Paths
Header Search Paths

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

fatihk
источник
-4

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

ВКЛЮЧАЮТ

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

anitesh975
источник