#import使用尖括号<>和引号“”


120

我想知道是什么决定了是否允许使用<Header.h>"Header.h"何时在Objective-C中导入文件。到目前为止,我的观察是,您""对实现源所在的项目中的文件使用引号,并<>在引用库或框架时使用尖括号。

但是,这是如何工作的呢?我要做什么才能使自己的班级使用方括号?目前,Xcode不允许我为自己的标头执行此操作。

另外,通过查看一些框架的标头,我发现这些标头之间使用相互引用<frameworkname/file.h>。如何做工作的?它看起来很像Java中的软件包,但据我所知,Objective-C中没有软件包。

Answers:


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语言中,约定是<>在“系统”目录以及""用户或本地目录中搜索括号中的头文件。

我猜,系统和本地的定义有点模糊。我相信它会在包含路径中的系统目录中或<header.h>的CPPFLAGS中查找,并在编译器的-I指定的本地目录或目录中搜索“ header.h”文件。

我认为它对于Objective-C的工作方式相似。



2

或设置Always Search User Path为,YES以便可以使用尖括号。


1

带尖括号,例如<Foundation/Foundation.h>,导入系统文件。

您可以使用双引号"Person.h"导入本地文件(创建的文件)并告诉编译器在哪里寻找它们。


1

<Name.h>- Angle brackets告诉预处理器在特殊的预先指定系统的目录中搜索。例如,您导入类似<UIKit/UIKit.h>或已添加框架的系统头

"Name.h"- Quotation marks告诉预处理器在当前目录中搜索。如果找不到标头,则预处理器尝试使用<Name.h>。通常您应该将其与项目文件一起使用


0

刚发现相同的问题,Xcode有两种类型的搜索路径:

User Header Search Paths
Header Search Paths

如果将自己的包含文件夹添加到标题搜索路径中,则可以使用尖括号,而不会出现任何问题。


-4

什么是头文件?头文件包含函数和变量的定义,可以使用预处理器#include语句将其合并到任何C程序中。每个编译器都提供了标准头文件,它们涵盖了一系列区域,字符串处理,数学,数据转换,变量的打印和读取。#-include包含有关输入的信息,如scanf(),以及输出,如printf()函数等,在编译器中。

包括

1)#INCLUDE:-它是在主要功能处理之前进行处理的预处理器。预处理程序的主要工作是初始化程序环境,即带有头文件的程序。2).h :-(头文件)头文件是扩展名为.h的文件,其中包含C函数声明和宏定义,并在多个源文件之间共享。问:头文件有两种类型:程序员编写的文件和编译器随附的文件?A)在尖括号中尖括号形式是“全局”包含的-传递给编译器的包含路径中某个位置的位置(例如#include),用于使用库函数,这些函数已在编译器中随时定义。在C语言中,约定是在<system>中搜索<>括号中的头文件。目录B)引号:-“ header.h”带引号的格式表示文件的“本地”包含(您需要指定当前文件的相对路径,例如#include“ headers / my_header.h”)在C中,约定是在用户或本地目录中搜索“”中的头文件。其中一个文件要包含在另一个文件中。(文件包含)。它可以在两种情况下使用:情况1:如果我们有一个非常大的程序,则最好将代码划分为几个不同的文件,每个文件包含一组相关函数。情况2:在我们编写的所有程序中,我们最多都需要一些函数和micros定义。防爆 )在C语言中,惯例是在用户或本地目录中搜索“”中的头文件。其中一个文件要包含在另一个文件中。(文件包含)。它可以在两种情况下使用:情况1:如果我们有一个非常大的程序,则最好将代码划分为几个不同的文件,每个文件包含一组相关函数。情况2:在我们编写的所有程序中,我们最多都需要一些函数和micros定义。防爆 )在C语言中,惯例是在用户或本地目录中搜索“”中的头文件。其中一个文件要包含在另一个文件中。(文件包含)。它可以在两种情况下使用:情况1:如果我们有一个非常大的程序,则最好将代码划分为几个不同的文件,每个文件包含一组相关函数。情况2:在我们编写的所有程序中,我们最多都需要一些函数和micros定义。防爆

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.