2008-10-05 7 views

Répondre

43

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

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

+3

Ce n'est pas vrai. La directive #import a été officiellement non dédaignée par l'équipe de gcc dans la version 3.4 et fonctionne très bien 99% du temps dans toutes les versions précédentes de gcc qui supportent –

+5

... qui supportent #import –

+1

Curieux, je n'étais pas au courant de cela. Peut-être aurais-je dû dire que c'est une chose spécifique à COM- et .NET à la place. –

66

L'importation dans VC++:#import est pour les bibliothèques de type ou .tlbs (commandes COM).

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

La directive #import a été introduite par Microsoft en tant qu'extension du langage C++. Vous pouvez lire à ce sujet au this MSDN article.

La directive #import est également utilisée avec les éléments .NET/CLI.

Importation 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 fois seulement. (Dans VC++ et GCC vous pouvez le faire via #pragma une fois aussi)

La directive #import a été officiellement undeprecated par l'équipe gcc en version 3.4 et fonctionne très bien 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 préfixer le contenu à votre fichier actuel. #include fait partie de la norme C++. Vous pouvez lire à ce sujet au this MSDN article.

4

importation était aussi l'un des mots-clés associés à n2073, Modules in C++, proposé au comité des langues par Daveed Vandevoorde en Septembre 2006. Je ne suis pas assez d'un geek de langue pour savoir si cette proposition était définitivement mis de côté ou si elle est en attente une mise en œuvre (preuve de concept) de l'auteur ou quelqu'un d'autre ...

+0

Daveed était un employé d'EDG à ce moment-là, donc je m'attendrais à ce qu'ils aient un code qui fonctionne. – MSalters

+1

J'espère bien qu'ils ont fait le travail requis, car il serait très agréable de passer de '#include' à un mécanisme d'importation. Mais j'ai entendu un bip sur cette fonctionnalité, et je suis sûr que ce n'est pas en C++ 0X. Peut-être avant que je ne prenne ma retraite; ^) ~ –

+1

Comme je le craignais, il y a quelques années: [Modules dans C++ 09?] (Http://groups.google.com/group/comp.lang.c++. modéré/msg/5ce3042a8de03284? dmode = source) –

7

#import est une solution globale au travail autour d'habitude

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

. #import inclut un fichier uniquement s'il n'a pas été inclus auparavant.

Il peut être utile de noter que l'Objective-C d'Apple utilise également les instructions #import.

3

Veuillez noter que dans gcc 4.1, #importest obsolète. Si vous l'utilisez, vous obtiendrez avertissement:

#import est une extension de GCC dépréciée

Questions connexes