C ++包含和导入差异

时间:2008-10-05 16:50:17

标签: c++ visual-c++ gcc import include

C ++中#include#import之间有什么区别?

6 个答案:

答案 0 :(得分:73)

在VC ++中导入: #import用于类型库或.tlbs(COM内容)。

类型库的内容被转换为C ++类,主要是自动为您描述COM接口,然后它包含在您的文件中。

Microsoft引入了#import指令作为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了解相关信息。

答案 1 :(得分:54)

#import是微软特有的,显然只适用于COM或.NET。

#include是一个标准的C / C ++预处理器语句,用于在源代码文件中包含标题(或偶尔包含其他源代码)文件。

答案 2 :(得分:8)

#import总体上是解决方案到通常的

#ifndef ...
#define ...
#include ...
#endif

变通。 #import仅包含以前未包含的文件。

值得注意的是,Apple的Objective-C也使用#import语句。

答案 3 :(得分:4)

import 也是与n2073, Modules in C++相关的关键词之一,由Daveed Vandevoorde于2006年9月向语言委员会提出。我不足以知道这是不是一个语言极客提案被明确搁置,或者等待作者或其他人的实施(概念证明)......

答案 4 :(得分:3)

请注意,在gcc 4.1中,#import 已弃用。如果你使用它,你会收到警告:

  

#import是不推荐使用的GCC扩展程序

答案 5 :(得分:0)

这篇文章应该更新吗?

现在,由于 C++20 标准已经结束,我们可以使用 import 语句进入作用域“模块”。

https://en.cppreference.com/w/cpp/language/modules

在从代码的不同部分调用多个模块时的编译速度方面,import 语句似乎比旧的 #include preprocesor 指令更快。