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

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

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

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

10 ответов

Решение

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

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

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

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

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

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

Чтобы импортировать ваши собственные классы, используя "< >", вы должны поместить заголовочные файлы (*.h) в папку lib компилятора или установить ponting SYSTEM VARIABLES в вашу папку lib.

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

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

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

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

User Header Search Paths
Header Search Paths

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

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

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

"" - Quotation marksНайдите указанный файл в той же папке, что и этот файл (файл.m, в котором находится строка #import).

<> - Angle bracketsИщите названный файл среди различных путей поиска заголовка, указанных в настройках сборки. (Эти пути поиска устанавливаются автоматически, и вам обычно не нужно их изменять.)

В общем, вы будете использовать угловые скобки для ссылки на файл заголовка, принадлежащий API-интерфейсу Cocoa, и кавычки для ссылки на файл заголовка, который вы написали. Если вам интересно, что импортирует директива #import, выберите ее (в Xcode) и выберите "Файл" → "Быстро открыть", чтобы отобразить содержимое назначенного файла заголовка.

Подробнее читайте здесь - https://www.oreilly.com/library/view/programming-ios-6/9781449365783/ch01s10.html

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

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

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

ВКЛЮЧАЮТ

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

Другие вопросы по тегам