C ++包含和导入差异


Answers:


61

#import 是Microsoft特有的东西,显然仅用于COM或.NET。

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


6
这不是真的。#import指令在gcc版本3.4中正式不被gcc团队弃用,并且在所有支持gcc的先前版本中,99%的时间都能正常工作
Brian R. Bondy

6
...支持#import
Brian R. Bondy

1
很好奇,我没有意识到。也许我应该说这是特定于COM和.NET的东西。
怪胎头

23
gcc支持的#import是仅一次包含标头的一种不可移植的方式:<a href=" gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/...>。这与Microsoft COM完全无关进口
fizzer

3
GCC #import实际上是一个Objective-C预处理程序命令,碰巧可以与gcc和clang中的.c文件一起使用(书模式下除外)。
迈克尔·莫里斯

83

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

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

#import指令由Microsoft引入,作为C ++语言的扩展。您可以在此MSDN文章中阅读有关它的信息。

#import指令还与.NET / CLI一起使用。

在gcc中导入: gcc中的导入与VC ++中的导入不同。这是最多仅包含一次标头的一种简单方法。(在VC ++和GCC中,您也可以#pragma一次执行此操作)

#importgcc团队在3.4版中正式弃用了该指令,并且在所有支持gcc的先前版本中,该指令可以正常运行99%

包含: #include主要用于头文件,但用于将内容放在当前文件之前。#include是C ++标准的一部分。您可以在此MSDN文章中阅读有关它的信息。


3
您的MSDN链接已过时。谢谢微软。
Mark Ransom '18

8

#import总体上解决了通常的问题

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

解决方法。#import仅在之前未包含文件时才包含文件。

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


4

导入也是与n2073(C ++中的模块)相关的关键字之一,该关键字由Daveed Vandevoorde于2006年9月向语言委员会提出。 (概念验证)来自作者或其他人的...


Daveed当时是EDG的一名员工,所以我希望他们拥有如此有效的代码。
MSalters

1
我肯定希望他们已经完成了必要的工作,因为将'#include'转换为导入机制会非常好。但是我听过nary对此功能没有任何了解,而且我很确定它不在C ++ 0X中。也许在我退休之前的某个时候; ^)
唐·韦克菲尔德

1
如我所担心的,它已经出了几年了: C ++ 09中的模块?
唐·韦克菲尔德

4

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

#import 是已弃用的GCC扩展


这不能回答问题。
SS安妮
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.