104

C ++#includeとの違いは何ですか?#import

4

6 に答える 6

88

VC ++でのインポート: #importタイプライブラリまたは.tlbs(COMのもの)用です。

タイプライブラリのコンテンツはC++クラスに変換され、ほとんどの場合、COMインターフェイスが自動的に記述されてから、ファイルに含まれます。

この#importディレクティブは、C++言語の拡張機能としてMicrosoftによって導入されました。このMSDNの記事でそれについて読むことができます。

この#importディレクティブは、.NET/CLIのものでも使用されます。

gccでのインポート: gccでのインポートは、VC++でのインポートとは異なります。これは、ヘッダーを最大で1回だけ含める簡単な方法です。(VC ++およびGCCでは、これを#pragma1回でも実行できます)

この#importディレクティブは、バージョン3.4ではgccチームによって公式に非推奨ではなく、サポートする以前のすべてのバージョンのgccで99%の時間正常に機能します。

インクルード: #include主にヘッダーファイル用ですが、コンテンツを現在のファイルの前に追加します。#includeC++標準の一部です。このMSDNの記事でそれについて読むことができます。

于 2008-10-05T16:50:55.837 に答える
66

#importこれはMicrosoft固有のものであり、明らかにCOMまたは.NETのもののみを対象としています。

#includeは標準のC/C ++プリプロセッサステートメントであり、ソースコードファイルにヘッダー(または場合によっては他のソースコード)ファイルを含めるために使用されます。

于 2008-10-05T16:54:19.403 に答える
9

#import全体的に通常の解決策です

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

回避策。#import以前にインクルードされていない場合にのみ、ファイルをインクルードします。

#importApple の Objective-C もステートメントを使用していることに注意してください。

于 2009-04-07T02:43:30.023 に答える
4

gcc 4.1では、非推奨になって#import いることに注意してください。これを使用すると、警告が表示されます。

#import非推奨のGCC拡張機能です

于 2010-01-22T00:19:08.337 に答える
4

importは、2006 年 9 月に Daveed Vandevoorde によって言語委員会に提案されたn2073、 Modules in C++ に関連付けられたキーワードの 1 つでもありました。その提案が決定的に棚上げされたのか、それとも実装を待っているのかを知るには、私は言語オタクではありません。 (概念の証明)著者または他の誰かから...

于 2008-10-05T21:14:32.560 に答える
3

この投稿を更新する必要がありますか?

現在、C++20 標準はそこから外れているため、次のimportステートメントでスコープ「モジュール」に入ることができます。

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

#includeコードの異なる部分から複数のモジュールが呼び出されるときのコンパイル速度の点では、import ステートメントは古いプリプロセッサ ディレクティブよりも速いようです。

于 2021-02-22T21:24:11.207 に答える