C ++ include e importa la differenza


Risposte:


61

#import è una cosa specifica di Microsoft, apparentemente solo per cose COM o .NET.

#include è un'istruzione standard del preprocessore C / C ++, utilizzata per includere file di intestazione (o occasionalmente altro codice sorgente) nel file del codice sorgente.


6
Questo non è vero. La direttiva #import è stata ufficialmente non dichiarata dal team gcc nella versione 3.4 e funziona bene il 99% delle volte in tutte le versioni precedenti di gcc che supportano
Brian R. Bondy

6
... che supportano #import
Brian R. Bondy

1
Curioso, non ne ero consapevole. Forse avrei dovuto dire invece che è una cosa specifica di COM e .NET.
Head Geek il

24
#Import supportato da gcc è un modo non portatile per includere un'intestazione una sola volta: <a href=" gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/…> . È completamente estraneo a Microsoft COM # importazione.
fizzer

3
GCC #import è in realtà un comando del preprocessore Objective-C che funziona con i file .c in gcc e clang (tranne che in modalità pedante).
Michael Morris

83

Import in VC ++: #import è per librerie di tipi o .tlbs (roba COM).

Il contenuto della libreria dei tipi viene convertito in classi C ++, che descrivono principalmente automaticamente le interfacce COM, quindi viene incluso nel file.

La #importdirettiva è stata introdotta da Microsoft come estensione al linguaggio C ++. Puoi leggere a riguardo in questo articolo di MSDN .

La #importdirettiva viene utilizzata anche con elementi .NET / CLI.

Import in gcc: l'importazione in gcc è diversa dall'importazione in VC ++. È un modo semplice per includere un'intestazione al massimo una sola volta. (In VC ++ e GCC puoi farlo anche #pragmauna volta)

La #importdirettiva è stata ufficialmente non dichiarata dal team di gcc nella versione 3.4 e funziona bene il 99% delle volte in tutte le versioni precedenti di gcc che supportano

Includi: #include è per la maggior parte dei file di intestazione, ma per anteporre il contenuto al file corrente. #includefa parte dello standard C ++. Puoi leggere a riguardo in questo articolo di MSDN .


3
I tuoi collegamenti MSDN non sono aggiornati. Grazie Microsoft.
Mark Ransom

8

#importè nel complesso una soluzione al solito

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

aggirare. #importinclude un file solo se non è stato incluso prima.

Potrebbe valere la pena notare che anche Objective-C di Apple utilizza le #importdichiarazioni.


4

import è stata anche una delle parole chiave associate a n2073, Modules in C ++ , proposta al comitato linguistico da Daveed Vandevoorde nel settembre 2006. Non sono abbastanza esperto di lingue per sapere se quella proposta è stata definitivamente accantonata o se è in attesa di implementazione (prova di concetto) dall'autore o da qualcun altro ...


Daveed era un dipendente EDG all'epoca, quindi mi aspetto che abbiano un codice così funzionante.
MSalters

1
Spero proprio che abbiano svolto il lavoro di gamba richiesto, perché sarebbe molto bello passare da "#include" a un meccanismo di importazione. Ma non ho sentito parlare di questa funzione e sono abbastanza sicuro che non sia in C ++ 0X. Forse qualche tempo prima che io vada in pensione; ^) ~
Don Wakefield,

1
Come temevo, sono passati alcuni anni: moduli in C ++ 09?
Don Wakefield,

4

Tieni presente che in gcc 4.1 #import è deprecato. Se lo usi, riceverai un avviso:

#import è un'estensione GCC deprecata


Questo non risponde alla domanda.
SS Anne
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.