C ++ Include und Import Unterschied

Antworten:

61

#import ist eine Microsoft-spezifische Sache, anscheinend nur für COM- oder .NET-Inhalte.

#include ist eine Standard-C / C ++ - Präprozessoranweisung, die zum Einfügen von Header- (oder gelegentlich anderen Quellcode-) Dateien in Ihre Quellcodedatei verwendet wird.

Head Geek
quelle
6
Das ist nicht wahr. Die # import-Direktive wurde vom gcc-Team in Version 3.4 offiziell nicht missbilligt und funktioniert in 99% der Fälle in allen früheren Versionen von gcc, die dies unterstützen
Brian R. Bondy,
6
... die #import unterstützen
Brian R. Bondy
1
Neugierig war mir das nicht bewusst. Vielleicht hätte ich sagen sollen, dass es stattdessen eine COM- und .NET-spezifische Sache ist.
Head Geek
23
Der von gcc unterstützte #import ist eine nicht portierbare Möglichkeit, einen Header nur einmal einzuschließen: <a href=" gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/…> . Er hat keinerlei Beziehung zu Microsoft COM # Import.
Fizzer
3
Der GCC #import ist eigentlich ein Objective-C-Präprozessorbefehl, der zufällig mit .c-Dateien in gcc und clang arbeitet (außer im pedantischen Modus).
Michael Morris
82

Import in VC ++: #import ist für Typbibliotheken oder .tlbs (COM-Zeug).

Der Inhalt der Typbibliothek wird in C ++ - Klassen konvertiert, die hauptsächlich die COM-Schnittstellen für Sie automatisch beschreiben, und dann in Ihre Datei aufgenommen.

Die #importRichtlinie wurde von Microsoft als Erweiterung der C ++ - Sprache eingeführt. Sie können darüber in diesem MSDN-Artikel lesen .

Die #importDirektive wird auch mit .NET / CLI-Inhalten verwendet.

Import in gcc: Der Import in gcc unterscheidet sich vom Import in VC ++. Es ist eine einfache Möglichkeit, einen Header höchstens einmal einzuschließen. (In VC ++ und GCC können Sie dies auch #pragmaeinmal tun )

Die #importDirektive wurde vom gcc-Team in Version 3.4 offiziell nicht missbilligt und funktioniert in 99% der Fälle in allen früheren Versionen von gcc, die dies unterstützen, einwandfrei

Include: #include dient hauptsächlich für Header-Dateien, dient jedoch dazu, den Inhalt Ihrer aktuellen Datei voranzustellen. #includeist Teil des C ++ - Standards. Sie können darüber in diesem MSDN-Artikel lesen .

Brian R. Bondy
quelle
3
Ihre MSDN-Links sind veraltet. Vielen Dank an Microsoft.
Mark Ransom
8

#importist insgesamt eine Lösung für das Übliche

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

umgehen. #importEnthält eine Datei nur, wenn sie zuvor noch nicht enthalten war.

Es kann erwähnenswert sein, dass Apples Objective-C auch #importAnweisungen verwendet.

thatha
quelle
4

Import war auch eines der Schlüsselwörter im Zusammenhang mit n2073, Module in C ++ , das Daveed Vandevoorde im September 2006 dem Sprachkomitee vorgeschlagen hatte. Ich bin kein Sprachfreak genug, um zu wissen, ob dieser Vorschlag endgültig zurückgestellt wurde oder auf eine Implementierung wartet (Proof of Concept) vom Autor oder einer anderen Person ...

Don Wakefield
quelle
Daveed war zu dieser Zeit ein EDG-Mitarbeiter, daher würde ich erwarten, dass sie einen so funktionierenden Code haben.
MSalters
1
Ich hoffe sehr, dass sie die erforderliche Arbeit geleistet haben, denn es wäre sehr schön, von '#include' zu einem Importmechanismus zu wechseln. Aber ich habe kaum einen Blick auf diese Funktion geworfen, und ich bin mir ziemlich sicher, dass sie nicht in C ++ 0X enthalten ist. Vielleicht irgendwann bevor ich in Rente gehe; ^) ~
Don Wakefield
1
Wie ich befürchtet habe, ist es ein paar Jahre her: Module in C ++ 09?
Don Wakefield
4

Bitte beachten Sie, dass in gcc 4.1, #import ist veraltet. Wenn Sie es verwenden, erhalten Sie eine Warnung:

#import ist eine veraltete GCC-Erweiterung

Mike Godin
quelle
Dies beantwortet die Frage nicht.
SS Anne