#import używając nawiasów ostrych <> i cudzysłowów „”

120

Zastanawiam się, co decyduje o tym, czy możesz używać, <Header.h>czy "Header.h"kiedy importujesz pliki w Objective-C. Do tej pory zauważyłem, że używasz cudzysłowów ""dla plików w projekcie, do których masz źródło implementacji, oraz nawiasów ostrych, <>gdy odwołujesz się do biblioteki lub frameworka.

Ale jak dokładnie to działa? Co musiałbym zrobić, aby moje własne klasy używały nawiasów? W tej chwili Xcode nie pozwoli mi tego zrobić dla moich własnych nagłówków.

Ponadto, patrząc w nagłówki niektórych frameworków, widzę, że nagłówki odwołują się do siebie za pomocą <frameworkname/file.h>. Jak to działa? Wygląda bardzo podobnie do pakietów w Javie, ale o ile wiem, w Objective-C nie ma czegoś takiego jak pakiet.

quano
źródło

Odpowiedzi:

122

Objective-C ma to wspólne z C / C ++; cytowany formularz jest przeznaczony dla „lokalnych” dołączeń plików (musisz podać ścieżkę względną z bieżącego pliku, np. #include "headers/my_header.h"), podczas gdy forma z nawiasami ostrymi jest dla „globalnych” dołączeń - tych znalezionych gdzieś na ścieżce dołączania przekazanej do kompilator (np #include <math.h>.).

Aby więc mieć własne nagłówki, < >nie " "trzeba przekazywać do kompilatora względnej lub bezwzględnej ścieżki do katalogu nagłówkowego. Zobacz „Jak dodać globalną ścieżkę dołączania dla Xcode”, aby dowiedzieć się, jak to zrobić w Xcode.

Zobacz tę stronę MSDN, aby uzyskać więcej informacji.

Mark Pim
źródło
1
Właśnie miałem problem z projektem GitHub odwołującym się do AFNetworking jako #import <AFNetworking / AFHTTPRequestOperationManager.h>, więc musiałem użyć $ (SRCROOT) / lib / AFNetworking jako ścieżki wyszukiwania nagłówka. W tym folderze znajduje się inny folder o nazwie AFNetworking, dzięki czemu import z nawiasami ostrymi znajduje go z tą ścieżką. Normalnie #import „AFHTTPRequestOperationManager.h” działałoby, ale w tym projekcie po prostu odwołuje się do niego inaczej.
Brennan
Wydaje się, że przyczyna jest taka sama jak w przypadku C / C ++. Nawias kątowy (oznaczony symbolem <>) wskazuje, że wyszukiwanie pliku innego niż bieżący katalog lokalny, podczas gdy cudzysłowy (oznaczone symbolem „”) wskazują, że wyszukiwanie pliku w bieżącym katalogu lokalnym.
Jayprakash Dubey
Link na końcu odpowiedzi jest nieaktualny.
Pang
14

W języku C konwencja jest taka, że ​​pliki nagłówkowe w <>nawiasach są przeszukiwane w katalogach „systemowych” oraz ""w katalogach użytkownika lub lokalnych.

Wydaje mi się, że definicja systemu i lokalnego jest nieco niejasna. Wydaje mi się, że wygląda to w katalogach systemowych w ścieżce dołączania lub w CPPFLAGS pod kątem <header.h>, a katalog lokalny lub katalog określony przez -I do kompilatora są przeszukiwane pod kątem plików "header.h".

Zakładam, że działa podobnie dla Objective-C.

stefanB
źródło
6

Aby zaimportować własne klasy za pomocą "<>", musisz umieścić pliki nagłówkowe (* .h) w folderze lib kompilatora lub ustawić zmienne systemowe ponting na folder lib.

Rodrigo Reis
źródło
2

Lub ustaw, Always Search User Pathaby YESmożna było używać nawiasów kątowych.

Ida88
źródło
1

Za pomocą nawiasów kątowych np. <Foundation/Foundation.h>Importujesz pliki systemowe.

Używasz podwójnych cudzysłowów "Person.h"do importowania plików lokalnych (plików, które utworzyłeś) i informowania kompilatora, gdzie ich szukać.

soupwaylee
źródło
1

<Name.h>- Angle bracketsmówi preprocesorowi, aby przeszukał specjalnie wyznaczone katalogi systemowe. Na przykład importujesz nagłówki systemów, takie jak <UIKit/UIKit.h>lub dodane struktury

"Name.h"- Quotation marksmówi preprocesorowi, aby przeszukał bieżący katalog. Jeśli nagłówek nie został znaleziony, preprocesor próbuje użyć <Name.h>. Zwykle powinieneś używać go z plikami projektu

yoAlex5
źródło
0

Właśnie natknąłem się na ten sam problem, istnieją 2 rodzaje ścieżek wyszukiwania to Xcode:

User Header Search Paths
Header Search Paths

Jeśli dodasz własne foldery włączania do ścieżek wyszukiwania nagłówków, możesz bez problemu używać nawiasów kątowych.

fatihk
źródło
-4

Co to jest plik nagłówka? Pliki nagłówkowe zawierają definicje funkcji i zmiennych, które można włączyć do dowolnego programu w języku C za pomocą instrukcji #include preprocesora. Standardowe pliki nagłówkowe są dostarczane z każdym kompilatorem i obejmują szereg dziedzin, obsługę ciągów, matematykę, konwersję danych, drukowanie i odczyt zmiennych. Ex- #include to zawiera informacje o wejściu, takim jak scanf (), a out put jak funkcja printf () itp. W kompilatorze.

ZAWIERAĆ

1) #INCLUDE: - Jest to preprocesor, który przetwarza przed procesem funkcji głównej. Głównym zadaniem preprocesora jest inicjalizacja środowiska programu, czyli programu z plikiem nagłówkowym. 2) .h: - (Plik nagłówkowy) Plik nagłówkowy to plik z rozszerzeniem .h, który zawiera deklaracje funkcji C i definicje makr, który ma być współużytkowany między kilkoma plikami źródłowymi. P) Istnieją dwa typy plików nagłówkowych: pliki zapisywane przez programistę i pliki dostarczane z kompilatorem? A) W nawiasach kątowych Forma nawiasów kątowych jest przeznaczona dla „globalnych” włączeń - tych, które znajdują się gdzieś na ścieżce dołączania przekazanej do kompilatora (np. #Include) Służy do korzystania z funkcji bibliotecznej, która jest gotowa do zdefiniowania w kompilatorze. W języku C konwencja jest taka, że ​​pliki nagłówkowe w nawiasach <> są przeszukiwane w 'system' katalogi B) Cudzysłowy: - „nagłówek.h” w cudzysłowie służy do „lokalnych” włączeń plików (należy określić względną ścieżkę do bieżącego pliku, np. #include „headers / my_header.h”) W C konwencja jest to, że pliki nagłówkowe w "" są przeszukiwane w katalogach użytkownika lub lokalnych. W nim jeden plik ma być dołączony do drugiego. (WŁĄCZENIE PLIKU). Można go użyć w dwóch przypadkach: Przypadek 1: Jeśli mamy bardzo duży program, kod najlepiej podzielić na kilka różnych plików, z których każdy zawiera zestaw powiązanych funkcji. Przypadek 2: Istnieją pewne funkcje i definicje mikro, których potrzebujemy co najwyżej we wszystkich programach, które piszemy. Dawny ) W C konwencja jest taka, że ​​pliki nagłówkowe w "" są przeszukiwane w katalogach użytkownika lub lokalnych. W nim jeden plik ma być dołączony do drugiego. (WŁĄCZENIE PLIKU). Można go użyć w dwóch przypadkach: Przypadek 1: Jeśli mamy bardzo duży program, kod najlepiej podzielić na kilka różnych plików, z których każdy zawiera zestaw powiązanych funkcji. Przypadek 2: Istnieją pewne funkcje i definicje mikro, których potrzebujemy co najwyżej we wszystkich programach, które piszemy. Dawny ) W C konwencja jest taka, że ​​pliki nagłówkowe w "" są przeszukiwane w katalogach użytkownika lub lokalnych. W nim jeden plik ma być dołączony do drugiego. (WŁĄCZENIE PLIKU). Można go użyć w dwóch przypadkach: Przypadek 1: Jeśli mamy bardzo duży program, kod najlepiej podzielić na kilka różnych plików, z których każdy zawiera zestaw powiązanych funkcji. Przypadek 2: Istnieją pewne funkcje i definicje mikro, których potrzebujemy co najwyżej we wszystkich programach, które piszemy. Dawny

anitesh975
źródło