C ++ zawiera i importuje różnicę

Odpowiedzi:

61

#import jest rzeczą specyficzną dla Microsoftu, najwyraźniej tylko dla rzeczy COM lub .NET.

#include jest standardową instrukcją preprocesora C / C ++, używaną do dołączania plików nagłówkowych (lub czasami innego kodu źródłowego) do pliku kodu źródłowego.

Head Geek
źródło
7
To nie jest prawda. Dyrektywa #import została oficjalnie odrzucona przez zespół gcc w wersji 3.4 i działa dobrze przez 99% czasu we wszystkich poprzednich wersjach gcc, które obsługują
Brian R. Bondy,
6
... które obsługują #import
Brian R. Bondy
1
Ciekawe, nie byłem tego świadomy. Być może powinienem był powiedzieć, że jest to rzecz specyficzna dla COM i .NET.
Head Geek
25
#Import obsługiwany przez gcc to nieprzenośny sposób na jednorazowe dołączenie nagłówka: <a href=" gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/…> . Jest całkowicie niezwiązany z Microsoft COM # import.
fizzer
3
GCC #import jest w rzeczywistości poleceniem preprocesora Objective-C, które działa z plikami .c w gcc i clang (z wyjątkiem trybu pedantycznego).
Michael Morris,
85

Import w VC ++: #import dotyczy bibliotek typów lub .tlbs (rzeczy COM).

Zawartość biblioteki typów jest konwertowana na klasy C ++, głównie automatycznie opisujące interfejsy COM, a następnie jest dołączana do pliku.

#importDyrektywa została wprowadzona przez Microsoft jako rozszerzenie języka C ++. Możesz o tym przeczytać w tym artykule MSDN .

#importDyrektywa stosuje się również z .NET / CLI rzeczy.

Import w gcc: Import w gcc różni się od importu w VC ++. Jest to prosty sposób na umieszczenie nagłówka najwyżej raz. (W VC ++ i GCC możesz to zrobić również #pragmaraz)

#importDyrektywa została oficjalnie undeprecated przez zespół gcc w wersji 3.4 i działa dobrze 99% czasu we wszystkich poprzednich wersjach gcc, które wspierają

Uwzględnij: #include dotyczy głównie plików nagłówkowych, ale służy do dołączania zawartości do bieżącego pliku. #includejest częścią standardu C ++. Możesz o tym przeczytać w tym artykule MSDN .

Brian R. Bondy
źródło
4
Twoje łącza MSDN są nieaktualne. Dzięki Microsoft.
Mark Ransom
9

#importjest ogólnie rozwiązaniem zwykłego

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

obejść. #importzawiera plik tylko wtedy, gdy nie był dołączany wcześniej.

Warto zauważyć, że Objective-C firmy Apple również używa #importoświadczeń.

thatha
źródło
4

import był również jednym ze słów kluczowych związanych z n2073, Moduły w C ++ , zaproponowanym komitetowi językowemu przez Daveeda Vandevoorde'a we wrześniu 2006 roku. Nie jestem na tyle maniakiem językowym, by wiedzieć, czy ta propozycja została ostatecznie odłożona na półkę, czy też oczekuje na wdrożenie (dowód koncepcji) od autora lub kogoś innego ...

Don Wakefield
źródło
Daveed był wówczas pracownikiem EDG, więc spodziewałbym się, że mają tak działający kod.
MSalters
1
Mam nadzieję, że wykonali wymaganą pracę, ponieważ byłoby bardzo miło przejść od mechanizmu „#include” do mechanizmu importu. Ale nie słyszałem ani słowa o tej funkcji i jestem prawie pewien, że nie ma jej w C ++ 0X. Może kiedyś, zanim przejdę na emeryturę; ^) ~
Don Wakefield,
1
Jak się obawiałem, minęło już kilka lat: moduły w C ++ 09?
Don Wakefield
4

Zauważ, że w gcc 4.1 #import jest przestarzałe. Jeśli go użyjesz, otrzymasz ostrzeżenie:

#import jest przestarzałym rozszerzeniem GCC

Mike Godin
źródło
To nie odpowiada na pytanie.
SS Anne