C ++#include
との違いは何ですか?#import
6 に答える
VC ++でのインポート: #import
タイプライブラリまたは.tlbs(COMのもの)用です。
タイプライブラリのコンテンツはC++クラスに変換され、ほとんどの場合、COMインターフェイスが自動的に記述されてから、ファイルに含まれます。
この#import
ディレクティブは、C++言語の拡張機能としてMicrosoftによって導入されました。このMSDNの記事でそれについて読むことができます。
この#import
ディレクティブは、.NET/CLIのものでも使用されます。
gccでのインポート:
gccでのインポートは、VC++でのインポートとは異なります。これは、ヘッダーを最大で1回だけ含める簡単な方法です。(VC ++およびGCCでは、これを#pragma
1回でも実行できます)
この#import
ディレクティブは、バージョン3.4ではgccチームによって公式に非推奨ではなく、サポートする以前のすべてのバージョンのgccで99%の時間正常に機能します。
インクルード: #include
主にヘッダーファイル用ですが、コンテンツを現在のファイルの前に追加します。#include
C++標準の一部です。このMSDNの記事でそれについて読むことができます。
#import
これはMicrosoft固有のものであり、明らかにCOMまたは.NETのもののみを対象としています。
#include
は標準のC/C ++プリプロセッサステートメントであり、ソースコードファイルにヘッダー(または場合によっては他のソースコード)ファイルを含めるために使用されます。
#import
全体的に通常の解決策です
#ifndef ...
#define ...
#include ...
#endif
回避策。#import
以前にインクルードされていない場合にのみ、ファイルをインクルードします。
#import
Apple の 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 ステートメントは古いプリプロセッサ ディレクティブよりも速いようです。