【问题标题】:#import using angle brackets < > and quote marks " "#import 使用尖括号 < > 和引号“”
【发布时间】:2010-11-05 20:57:24
【问题描述】:

我想知道当您在 Objective-C 中导入文件时,是什么决定了您是否可以使用 &lt;Header.h&gt;"Header.h"。到目前为止,我的观察是,当您引用库或框架时,您对项目中的文件使用引号"",并使用尖括号&lt;&gt;

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

另外,通过查看一些框架的标头,我发现标头使用&lt;frameworkname/file.h&gt; 相互引用。 那个是如何工作的?它看起来很像 Java 中的包,但据我所知,Objective-C 中没有包这样的东西。

【问题讨论】:

    标签: objective-c syntax import packages


    【解决方案1】:

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

    所以要让您自己的头文件使用&lt; &gt; 而不是" ",您需要将头文件目录的相对路径或绝对路径传递给编译器。有关如何在 Xcode 中执行此操作的信息,请参阅 "How to add a global include path for Xcode"

    请参阅this MSDN page 了解更多信息。

    【讨论】:

    • 我刚刚遇到了一个将 AFNetworking 引用为 #import 的 GitHub 项目的问题,因此我不得不将 $(SRCROOT)/lib/AFNetworking 作为标题搜索路径。在此文件夹下是另一个名为 AFNetworking 的文件夹,这是带尖括号的导入如何通过该路径找到它。通常 #import "AFHTTPRequestOperationManager.h" 会起作用,但对于这个项目,它只是以不同的方式引用它。
    • 似乎原因与 C/C++ 相同。尖括号(用符号表示)表示搜索当前本地目录以外的文件,而引号(用“”符号表示)表示搜索当前本地目录中的文件。
    • 答案末尾的链接已过时。
    【解决方案2】:

    在 C 中,约定是在“系统”目录中搜索 &lt;&gt; 括号中的头文件,在用户或本地目录中搜索 ""

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        User Header Search Paths
        Header Search Paths
        

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

        【讨论】:

          【解决方案5】:

          或者将Always Search User Path 设置为YES,这样你就可以使用尖括号了。

          【讨论】:

            【解决方案6】:

            &lt;Name.h&gt; - Angle brackets 告诉预处理器在 special 预先指定的系统目录中进行搜索。例如,您导入 &lt;UIKit/UIKit.h&gt; 之类的系统标头或添加框架

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

            【讨论】:

              【解决方案7】:

              带尖括号,例如&lt;Foundation/Foundation.h&gt;你导入系统文件。

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

              【讨论】:

                【解决方案8】:

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

                例如如果您的框架是 AlphaTools,而您的标头是 AceHeader,那么您将在 Target Membership 上选择 AlphaTools,这样您就可以访问 &lt; AlphaTools/AceHeader.h

                【讨论】:

                  【解决方案9】:

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

                  包括

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

                  【讨论】:

                    猜你喜欢
                    • 2012-03-22
                    • 1970-01-01
                    • 2015-07-30
                    • 1970-01-01
                    • 2021-02-02
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多