C++包含和导入差异

Mar*_*ius 90 c++ import gcc include visual-c++

#include#importC++有什么区别?

Bri*_*ndy 75

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

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

#import指令由Microsoft引入,作为C++语言的扩展.您可以在此MSDN文章中阅读相关内容.

#import指令还用于.NET/CLI的东西.

在gcc中导入: gcc中的导入与VC++中的导入不同.这是一种仅包含一次标题的简单方法.(在VC++和GCC中你也可以通过#pragma一次这样做)

#import指令在版本3.4中被gcc团队正式取消,并且在所有以前版本的gcc中99%的时间都可以正常工作

包含: #include主要用于头文件,但要将内容添加到当前文件中.#include是C++标准的一部分.您可以在此MSDN文章中阅读相关内容.

  • 您的 MSDN 链接已过时。感谢微软。 (5认同)

Hea*_*eek 57

#import 是特定于Microsoft的东西,显然只适用于COM或.NET.

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

  • gcc支持的#import是一种不可移植的方式,只包含一次标题:<a href ="http://gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/Obsolete-once_002donly-headers.html" />.它与Microsoft COM #import完全无关. (23认同)
  • ...支持#import (6认同)
  • 这不是真的.#import指令在版本3.4中被gcc团队正式取消了,并且在所有以前版本的gcc中99%的时间都能正常运行 (5认同)
  • GCC#import实际上是一个Objective-C预处理器命令,恰好与gcc和clang中的.c文件一起使用(在迂腐模式下除外). (3认同)

tha*_*tha 8

#import总的来说是通常的解决方案

#ifndef ...
#define ...
#include ...
#endif
Run Code Online (Sandbox Code Playgroud)

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

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


Ale*_*ara 6

这篇文章应该更新吗?

现在,由于 C++20 标准已经存在,我们可以使用该import语句进入“模块”范围。

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

就从代码的不同部分调用多个模块时的编译速度而言,导入语句似乎比旧的#include预处理器指令更快。

  • 导入完全无关?LMAO。您能否为 SO 读者辩护您的答案,而只是“告诉人们”明显的事情,例如**什么是预处理器指令**? (5认同)
  • c++20 import 完全不相关,因为以预处理器字符“#”开头表示它是预处理器指令,而模块“import”是以模块声明开头的关键字。 (4认同)
  • 我相信任何搜索“#include”和“import”的人都会首先找到这个问题。由于搜索引擎的限制,它是相关的。 (4认同)