131

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

但这究竟是如何工作的?我需要做什么才能让我自己的课程使用方括号?现在 Xcode 不允许我为自己的头文件这样做。

此外,通过查看一些框架标题,我看到标题相互引用<frameworkname/file.h>. 那是如何工作的?它看起来很像 Java 中的包,但据我所知,在 Objective-C 中没有包这样的东西。

4

9 回答 9

131

Objective-C 与 C/C++ 有共同点。带引号的形式用于“本地”包含文件(您需要指定当前文件的相对路径,例如#include "headers/my_header.h"),而尖括号形式用于“全局”包含——在传递给的包含路径中某处找到的那些编译器(例如#include <math.h>)。

< >因此,要使用您自己的头文件" ",您需要将头文件目录的相对路径或绝对路径传递给编译器。有关如何在 Xcode 中执行此操作的信息,请参阅“如何为 Xcode 添加全局包含路径”

有关详细信息,请参阅此 MSDN 页面

于 2009-06-25T14:53:55.640 回答
17

在 C 中,约定是在“系统”目录以及用户或本地目录<>中搜索括号中的头文件。""

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

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

于 2009-06-25T14:54:50.927 回答
6

要使用“< >”导入您自己的类,您必须将头文件 (*.h) 放在编译器的 lib 文件夹中,或者设置一个指向您的 lib 文件夹的 SYSTEM VARIABLES。

于 2009-06-25T14:54:30.117 回答
2

刚刚偶然发现同样的问题,Xcode 有两种搜索路径:

User Header Search Paths
Header Search Paths

如果您将自己的包含文件夹添加到标题搜索路径中,则可以毫无问题地使用尖括号。

于 2015-06-15T07:58:24.597 回答
2

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

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

于 2019-12-05T14:59:23.490 回答
2

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

于 2017-04-28T15:16:16.767 回答
1

例如,使用尖括号<Foundation/Foundation.h>可以导入系统文件。

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

于 2019-03-22T11:15:50.590 回答
0

如果这是一个 Xcode 项目并且您想将它包含在框架中,请打开您想要包含的头文件。然后,打开 Xcode 最右边的选项卡,在“Target Membership”下,单击您希望文件可用的框架。

例如,如果您的框架是 AlphaTools 并且您的标题是 AceHeader,那么您将在 Target Membership 上选择 AlphaTools,以便您可以访问< AlphaTools/AceHeader.h

于 2021-05-06T19:24:40.387 回答
-5

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

包括

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

于 2014-12-06T07:48:57.707 回答