【发布时间】:2010-09-15 09:29:04
【问题描述】:
C++ 中#include 和#import 有什么区别?
【问题讨论】:
-
注意
#importfor vc++ 和 gcc 与importof C++20 不同。
标签: c++ visual-c++ gcc import include
C++ 中#include 和#import 有什么区别?
【问题讨论】:
#import for vc++ 和 gcc 与 import of C++20 不同。
标签: c++ visual-c++ gcc import include
在 VC++ 中导入: #import 用于类型库或 .tlbs(COM 内容)。
类型库的内容被转换为 C++ 类,主要是自动为您描述 COM 接口,然后将其包含到您的文件中。
#import 指令由 Microsoft 作为 C++ 语言的扩展引入。你可以在this MSDN article阅读它。
#import 指令也用于 .NET / CLI 的东西。
在 gcc 中导入:
gcc 中的导入与 VC++ 中的导入不同。这是一种最多只包含一次标题的简单方法。 (在 VC++ 和 GCC 中,您也可以通过 #pragma 执行此操作)
#import 指令在 3.4 版中被 gcc 团队正式弃用,并且在所有支持的 gcc 之前版本中 99% 的时间都可以正常工作
包括: #include 主要用于头文件,但将内容添加到当前文件中。 #include 是 C++ 标准的一部分。你可以在this MSDN article阅读它。
【讨论】:
#import 是微软特有的东西,显然只适用于 COM 或 .NET 的东西。
#include 是标准 C/C++ 预处理器语句,用于在源代码文件中包含头文件(或偶尔包含其他源代码)。
【讨论】:
#import 总体上是一个解决方案对通常情况的解决方案
#ifndef ...
#define ...
#include ...
#endif
解决方法。 #import 仅包含以前未包含的文件。
值得注意的是,Apple 的 Objective-C 也使用了#import 语句。
【讨论】:
import 也是与 n2073, Modules in C++ 相关的关键字之一,由 Daveed Vandevoorde 于 2006 年 9 月向语言委员会提出。我不是一个语言极客,无法知道该提案是否适用最终搁置,或者如果它正在等待作者或其他人的实施(概念证明)......
【讨论】:
请注意,在 gcc 4.1 中,#import 已弃用。如果你使用它,你会得到警告:
#import是一个已弃用的 GCC 扩展
【讨论】:
这篇文章应该更新吗?
现在,由于 C++20 标准已经发布,我们可以使用 import 语句进入范围“模块”。
https://en.cppreference.com/w/cpp/language/modules
就从代码的不同部分调用多个模块时的编译速度而言,import 语句似乎比旧的#include preprocesor 指令更快。
【讨论】:
#import 和import。这个问题是回复:MS #import 声明,特别与标签中的visual-c++ 相关。 import 关键字是一个新概念,在提出这个问题时(在标准中)并不存在。
#include 和import 的人也会首先找到这个问题。由于搜索引擎的限制,所以它是相关的。