C ++ inclure et importer la différence

Réponses:

61

#import est une chose spécifique à Microsoft, apparemment pour les trucs COM ou .NET uniquement.

#include est une instruction de préprocesseur C / C ++ standard, utilisée pour inclure des fichiers d'en-tête (ou parfois d'autres codes source) dans votre fichier de code source.

Chef Geek
la source
6
Ce n'est pas vrai. La directive #import n'a pas été officiellement déconseillée par l'équipe gcc dans la version 3.4 et fonctionne correctement 99% du temps dans toutes les versions précédentes de gcc qui supportent
Brian R. Bondy
6
... qui supporte #import
Brian R. Bondy
1
Curieux, je n'en étais pas conscient. J'aurais peut-être dû dire que c'est plutôt une chose spécifique à COM et .NET.
Head Geek
24
Le #import pris en charge par gcc est un moyen non portable d'inclure un en-tête une seule fois: <a href=" gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/...> . Il n'a aucun rapport avec le Microsoft COM # import.
fizzer
3
GCC #import est en fait une commande de préprocesseur Objective-C qui fonctionne avec les fichiers .c dans gcc et clang (sauf en mode pédantique).
Michael Morris
83

Importer en VC ++: #import est pour les bibliothèques de types ou .tlbs (trucs COM).

Le contenu de la bibliothèque de types est converti en classes C ++, décrivant principalement les interfaces COM pour vous automatiquement, puis il est inclus dans votre fichier.

La #importdirective a été introduite par Microsoft comme une extension du langage C ++. Vous pouvez en savoir plus sur cet article MSDN .

La #importdirective est également utilisée avec des éléments .NET / CLI.

Importer dans gcc: L'importation dans gcc est différente de l'importation dans VC ++. C'est un moyen simple d'inclure un en-tête au plus une seule fois. (Dans VC ++ et GCC, vous pouvez également le faire #pragmaune fois)

La #importdirective n'a pas été officiellement déconseillée par l'équipe gcc dans la version 3.4 et fonctionne correctement 99% du temps dans toutes les versions précédentes de gcc qui prennent en charge

Inclure: #include est pour la plupart des fichiers d'en-tête, mais pour ajouter le contenu à votre fichier actuel. #includefait partie de la norme C ++. Vous pouvez en savoir plus sur cet article MSDN .

Brian R. Bondy
la source
3
Vos liens MSDN sont périmés. Merci Microsoft.
Mark Ransom
8

#importest globalement une solution à l'habituel

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

solution de contournement. #importinclut un fichier uniquement s'il n'a pas été inclus auparavant.

Il peut être intéressant de noter que l'Objective-C d'Apple utilise également des #importdéclarations.

thatha
la source
4

import était aussi l'un des mots-clés associés à n2073, Modules en C ++ , proposé au comité des langues par Daveed Vandevoorde en septembre 2006. Je ne suis pas assez geek du langage pour savoir si cette proposition a été définitivement abandonnée ou si elle est en attente d'une implémentation (preuve de concept) de l'auteur ou de quelqu'un d'autre ...

Don Wakefield
la source
Daveed était un employé d'EDG à l'époque, donc je m'attendrais à ce qu'ils aient un code aussi fonctionnel.
MSalters
1
J'espère vraiment qu'ils ont fait le travail nécessaire, car ce serait très bien de passer de '#include' à un mécanisme d'importation. Mais je n'ai entendu aucun coup d'œil sur cette fonctionnalité, et je suis presque sûr que ce n'est pas en C ++ 0X. Peut-être quelque temps avant ma retraite; ^) ~
Don Wakefield
1
Comme je le craignais, c'est dans quelques années: des modules en C ++ 09?
Don Wakefield
4

Veuillez noter que dans gcc 4.1, #import est obsolète. Si vous l'utilisez, vous recevrez un avertissement:

#import est une extension GCC obsolète

Mike Godin
la source
Cela ne répond pas à la question.
SS Anne