C ++#includeとの違いは何ですか?#import
6 に答える
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の記事でそれについて読むことができます。
#importこれはMicrosoft固有のものであり、明らかにCOMまたは.NETのもののみを対象としています。
#includeは標準のC/C ++プリプロセッサステートメントであり、ソースコードファイルにヘッダー(または場合によっては他のソースコード)ファイルを含めるために使用されます。
#import全体的に通常の解決策です
#ifndef ...
#define ...
#include ...
#endif
回避策。#import以前にインクルードされていない場合にのみ、ファイルをインクルードします。
#importApple の Objective-C もステートメントを使用していることに注意してください。
gcc 4.1では、非推奨になって#import いることに注意してください。これを使用すると、警告が表示されます。
#import非推奨のGCC拡張機能です
importは、2006 年 9 月に Daveed Vandevoorde によって言語委員会に提案されたn2073、 Modules in C++ に関連付けられたキーワードの 1 つでもありました。その提案が決定的に棚上げされたのか、それとも実装を待っているのかを知るには、私は言語オタクではありません。 (概念の証明)著者または他の誰かから...
この投稿を更新する必要がありますか?
現在、C++20 標準はそこから外れているため、次のimportステートメントでスコープ「モジュール」に入ることができます。
https://en.cppreference.com/w/cpp/language/modules
#includeコードの異なる部分から複数のモジュールが呼び出されるときのコンパイル速度の点では、import ステートメントは古いプリプロセッサ ディレクティブよりも速いようです。