#import en utilisant des crochets angulaires <> et des guillemets ""

120

Je me demande ce qui décide si vous êtes autorisé à utiliser <Header.h>ou "Header.h"lorsque vous importez des fichiers dans Objective-C. Jusqu'à présent, mon observation a été que vous utilisez les guillemets ""pour les fichiers de votre projet sur lesquels vous avez la source d'implémentation et les crochets <>lorsque vous faites référence à une bibliothèque ou à un framework.

Mais comment cela fonctionne-t-il exactement? Que dois-je faire pour que mes propres classes utilisent les parenthèses? Pour le moment, Xcode ne me permettra pas de faire cela pour mes propres en-têtes.

De plus, en regardant dans certains en-têtes de frameworks, je vois que les en-têtes se référencent entre eux <frameworkname/file.h>. Comment ça marche? Cela ressemble beaucoup à des packages en Java, mais pour autant que je sache, il n'existe pas de package en Objective-C.

quano
la source

Réponses:

122

Objective-C a ceci en commun avec C / C ++; la forme citée est pour #include "headers/my_header.h"les inclusions "locales" des fichiers (vous devez spécifier le chemin relatif du fichier courant, par exemple ), tandis que la forme entre crochets angulaires est pour les inclusions "globales" - celles trouvées quelque part sur le chemin d'inclusion passé à le compilateur (par exemple #include <math.h>).

Donc, pour utiliser vos propres en-têtes, vous n'avez < >pas " "besoin de passer le chemin relatif ou absolu de votre répertoire d'en-tête au compilateur. Voir «Comment ajouter un chemin d’inclusion global pour Xcode» pour plus d’informations sur la façon de procéder dans Xcode.

Consultez cette page MSDN pour plus d'informations.

Mark Pim
la source
1
Je viens d'avoir un problème avec un projet GitHub référençant AFNetworking comme #import <AFNetworking / AFHTTPRequestOperationManager.h> donc j'ai dû $ (SRCROOT) / lib / AFNetworking comme chemin de recherche d'en-tête. Sous ce dossier se trouve un autre dossier nommé AFNetworking qui permet à l'importation avec des crochets angulaires de le trouver avec ce chemin. Normalement, #import "AFHTTPRequestOperationManager.h" fonctionnerait mais pour ce projet, il le fait simplement référence différemment.
Brennan
Il semble que la raison soit la même que pour C / C ++. Les crochets angulaires (indiqués par le symbole <>) indiquent que la recherche d'un fichier autre que le répertoire local actuel, tandis que les guillemets (indiqués par le symbole "") indiquent cette recherche de fichier dans le répertoire local courant.
Jayprakash Dubey
Le lien à la fin de la réponse est obsolète.
Pang
14

En C, la convention est que les fichiers d'en-tête entre <>crochets sont recherchés dans les répertoires «système» et ""dans les répertoires utilisateur ou locaux.

La définition du système et du local est un peu vague, je suppose. Je crois qu'il regarde dans les répertoires système dans include path ou dans CPPFLAGS pour <header.h>, et le répertoire local ou le répertoire spécifié avec -I au compilateur sont recherchés pour les fichiers "header.h".

Je suppose que cela fonctionne de la même manière pour Objective-C.

stefanB
la source
6

Pour importer vos propres classes en utilisant "<>", vous devez placer les fichiers d'en-tête (* .h) dans le dossier lib du compilateur ou définir un pontage VARIABLES SYSTÈME vers votre dossier lib.

Rodrigo Reis
la source
2

Ou définissez-le Always Search User Pathsur YESpour pouvoir utiliser des crochets angulaires.

Ida88
la source
1

Avec des chevrons, par exemple, <Foundation/Foundation.h>vous importez des fichiers système.

Vous utilisez des guillemets doubles "Person.h"pour importer des fichiers locaux (fichiers que vous avez créés) et pour indiquer au compilateur où les rechercher.

soupwaylee
la source
1

<Name.h>- Angle bracketsdit au préprocesseur de rechercher dans les répertoires spéciaux d' un système pré-désigné. Par exemple, vous importez des en-têtes de systèmes comme <UIKit/UIKit.h>ou des frameworks ajoutés

"Name.h"- Quotation marksdit au préprocesseur de rechercher dans un répertoire courant . Si un en-tête n'a pas été trouvé, le préprocesseur essaie de l'utiliser <Name.h>. Vous devez généralement l'utiliser avec les fichiers de votre projet

yoAlex5
la source
0

Je viens de tomber sur le même problème, il existe 2 types de chemins de recherche est Xcode:

User Header Search Paths
Header Search Paths

Si vous ajoutez vos propres dossiers d'inclusion dans les chemins de recherche d'en-tête, vous pouvez utiliser des crochets inclinés sans aucun problème.

fatihk
la source
-4

QU'EST-CE QUE LE FICHIER EN-TÊTE? Les fichiers d'en-tête contiennent des définitions de fonctions et de variables qui peuvent être incorporées dans n'importe quel programme C à l'aide de l'instruction #include du pré-processeur. Les fichiers d'en-tête standard sont fournis avec chaque compilateur et couvrent une gamme de domaines, la gestion des chaînes, les mathématiques, la conversion de données, l'impression et la lecture de variables. Ex- #include, il contient les informations sur l'entrée comme scanf (), et out mis comme la fonction printf () et etc. dans un compilateur.

COMPRENDRE

1) #INCLUDE: - C'est un pré-processeur qui traite avant le processus de la fonction principale. Le travail principal du pré-processeur est d'initialiser l'environnement du programme c'est-à-dire le programme avec le fichier d'en-tête. 2) .h: - (Fichier d'en-tête) Un fichier d'en-tête est un fichier avec l'extension .h qui contient des déclarations de fonction C et des définitions de macro et à partager entre plusieurs fichiers source. Q) Il existe deux types de fichiers d'en-tête: les fichiers que le programmeur écrit et les fichiers fournis avec votre compilateur? A) Dans les crochets angulaires La forme des crochets angulaires est pour les inclusions "globales" - celles trouvées quelque part sur le chemin d'inclusion passé au compilateur (par exemple #include). Elle est utilisée pour l'utilisation de la fonction de bibliothèque qui est prête à être définie dans le compilateur. En C, la convention est que les fichiers d'en-tête entre crochets <> sont recherchés dans 'système' répertoires B) guillemets: - La forme entre guillemets «header.h» est pour les inclusions «locales» de fichiers (vous devez spécifier le chemin relatif du fichier courant, par exemple #include "headers / my_header.h") En C la convention est que les fichiers d'en-tête de "" sont recherchés dans les répertoires utilisateur ou locaux. Dans celui-ci un fichier à inclure dans un autre (INCLUSION DE FICHIERS). Il peut être utilisé dans deux cas: Cas 1: Si nous avons un programme très volumineux, le code est mieux divisé en plusieurs fichiers différents, chacun contenant un ensemble de fonctions associées. Cas 2: Il y a certaines fonctions et définitions de micros dont nous avons tout au plus besoin dans tous les programmes que nous écrivons. Ex ) En C, la convention est que les fichiers d'en-tête de "" sont recherchés dans les répertoires utilisateur ou local. Dans celui-ci un fichier à inclure dans un autre (INCLUSION DE FICHIERS). Il peut être utilisé dans deux cas: Cas 1: Si nous avons un programme très volumineux, le code est mieux divisé en plusieurs fichiers différents, chacun contenant un ensemble de fonctions associées. Cas 2: Il y a certaines fonctions et définitions de micros dont nous avons tout au plus besoin dans tous les programmes que nous écrivons. Ex ) En C, la convention est que les fichiers d'en-tête de "" sont recherchés dans les répertoires utilisateur ou local. Dans celui-ci un fichier à inclure dans un autre (INCLUSION DE FICHIERS). Il peut être utilisé dans deux cas: Cas 1: Si nous avons un programme très volumineux, le code est mieux divisé en plusieurs fichiers différents, chacun contenant un ensemble de fonctions associées. Cas 2: Il y a certaines fonctions et définitions de micros dont nous avons tout au plus besoin dans tous les programmes que nous écrivons. Ex

anitesh975
la source