【问题标题】:for the mixed code, when to use include , when to use import?对于混合代码,何时使用包含,何时使用导入?
【发布时间】:2013-04-30 02:19:01
【问题描述】:

对于混合代码,我在想什么时候用include,什么时候用import。

我检查了一些文档,导入比包含更好,因为它可以消除使用包含保护(pragma once)的需要。

我想知道我们是否可以在混合代码中完全使用导入?

【问题讨论】:

  • 请解释一下“混合代码”是什么意思
  • “混合代码”是什么意思? Objective-C 和什么?如果您指的是标准 C 代码,那么 #import 可以正常工作。

标签: ios objective-c


【解决方案1】:

这个问题在 Stackoverflow 中有很长的答案:

进口

在 C 语言中,#include 预编译指令总是会导致文件的内容在此时插入到源代码中。 Objective-C 具有等效的 #import 指令,只是每个文件在每个编译单元中只包含一次,从而无需包含保护。

#import 和#include

“#import”Objective-C/Objective-C++ 头文件和#include C/C++ 头文件。 根据您所包含的标头语言在#import 和#include 之间进行选择。

包含使用 Objective-C 或 Objective-C++ 的标头时,请使用 #import。 包含标准 C 或 C++ 标头时,请使用#include。标头应提供自己的#define 保护。 一些 Objective-C 头文件缺少#define 保护,并且期望只包含在#import 中。由于 Objective-C 头文件可能只包含在 Objective-C 源文件和其他 Objective-C 头文件中,因此全面使用 #import 是合适的。

没有任何 Objective-C 的标准 C 和 C++ 标头可以预期包含在普​​通 C 和 C++ 文件中。由于标准 C 或 C++ 中没有#import,因此在这些情况下,#include 将包含此类文件。在 Objective-C 源文件中为它们使用#include 也意味着这些标头将始终以相同的语义包含。

此规则有助于避免跨平台项目中的意外错误。引入新 C 或 C++ 头文件的 Mac 开发人员可能会忘记添加 #define 保护,如果新头文件包含在 #import 中,这不会在 Mac 上造成问题,但会破坏使用 #include 的其他平台上的构建。通过在所有平台上使用 #include 保持一致意味着编译更有可能在任何地方成功或在任何地方失败,并避免文件仅在某些平台上工作的挫败感。

#import <Cocoa/Cocoa.h>
#include <CoreFoundation/CoreFoundation.h>
#import "GTMFoo.h"
#include "base/basictypes.h"

#import 指令作为#include 的改进版本添加到Objective-C。然而,它是否得到改进仍然是一个争论的问题。 #import 确保文件只包含一次,这样您就不会遇到递归包含的问题。但是,无论如何,大多数体面的头文件都会保护自己免受这种情况的影响,因此它并没有太大的好处。

基本上由您决定要使用哪个。我倾向于为 Object-C 的东西(如类定义等)#import 标头和我需要的#include 标准 C 的东西。

看看这个链接,有更多的答案:

What is the difference between #import and #include in Objective-C?

Difference Between includes and imports [duplicate]

外部文档链接:Objective-C Style Guide

The difference between #import, #include and @class in Objective C

【讨论】:

    【解决方案2】:

    如果您指的是标准 C 代码,那么您应该始终可以使用 #import

    此外,如果您在 .h 文件中并且只需要能够在 @property 中使用类的名称,则可以使用不带 .h 或 .m 的 @class &lt;myClassName&gt;使用类名。

    【讨论】:

      猜你喜欢
      • 2014-07-18
      • 2021-01-03
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      相关资源
      最近更新 更多