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.


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 .


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.


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 ...


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


Dies beantwortet die Frage nicht.
SS Anne
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.