C ++ incluye e importa la diferencia

Respuestas:

61

#import es algo específico de Microsoft, aparentemente solo para cosas COM o .NET.

#include es una declaración de preprocesador estándar de C / C ++, que se utiliza para incluir archivos de encabezado (u ocasionalmente otro código fuente) en su archivo de código fuente.

Jefe Geek
fuente
6
Esto no es verdad. La directiva #import no fue utilizada oficialmente por el equipo de gcc en la versión 3.4 y funciona bien el 99% del tiempo en todas las versiones anteriores de gcc que admiten
Brian R. Bondy
6
... que admiten #importación
Brian R. Bondy
1
Curioso, no era consciente de eso. Quizás debería haber dicho que es algo específico de COM y .NET.
Head Geek
23
El #import compatible con gcc es una forma no portátil de incluir un encabezado solo una vez: <a href=" gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/…> . No tiene ninguna relación con Microsoft COM # import.
fizzer
3
El GCC #import es en realidad un comando del preprocesador de Objective-C que funciona con archivos .c en gcc y clang (excepto en modo pedante).
Michael Morris
83

Importar en VC ++: #import es para bibliotecas de tipos o .tlbs (cosas COM).

El contenido de la biblioteca de tipos se convierte en clases de C ++, principalmente describiendo las interfaces COM automáticamente, y luego se incluye en su archivo.

La #importdirectiva fue introducido por Microsoft como una extensión del lenguaje C ++. Puede leerlo en este artículo de MSDN .

La #importdirectiva también se usa con cosas .NET / CLI.

Importar en gcc: La importación en gcc es diferente de la importación en VC ++. Es una forma sencilla de incluir un encabezado como máximo una vez. (En VC ++ y GCC también puede hacer esto #pragmauna vez)

El #importequipo de gcc oficialmente no adoptó la directiva en la versión 3.4 y funciona bien el 99% del tiempo en todas las versiones anteriores de gcc que admiten

Incluir: #include es principalmente para archivos de encabezado, pero para anteponer el contenido a su archivo actual. #includees parte del estándar C ++. Puede leerlo en este artículo de MSDN .

Brian R. Bondy
fuente
3
Sus enlaces de MSDN están obsoletos. Gracias Microsoft.
Mark Ransom
8

#importes en general una solución a lo habitual

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

solución alterna. #importincluye un archivo solo si no se ha incluido antes.

Vale la pena señalar que Objective-C de Apple también usa #importdeclaraciones.

Thatha
fuente
4

importar también fue una de las palabras clave asociadas con n2073, Módulos en C ++ , propuesta al comité de idiomas por Daveed Vandevoorde en septiembre de 2006. No soy lo suficientemente experto en idiomas para saber si esa propuesta fue definitivamente archivada o si está esperando una implementación (prueba de concepto) del autor o de otra persona ...

Don Wakefield
fuente
Daveed era un empleado de EDG en ese momento, por lo que esperaría que tuvieran un código tan funcional.
MSalters
1
Espero que hayan hecho el trabajo preliminar necesario, porque sería muy bueno pasar de '#include' a un mecanismo de importación. Pero no he escuchado ni un pío sobre esta función, y estoy bastante seguro de que no está en C ++ 0X. Quizás en algún momento antes de jubilarme; ^) ~
Don Wakefield
1
Como temía, faltan algunos años: ¿ Módulos en C ++ 09?
Don Wakefield
4

Tenga en cuenta que en gcc 4.1, #import está obsoleto. Si lo usa, recibirá una advertencia:

#import es una extensión de GCC obsoleta

Mike Godin
fuente
Esto no responde a la pregunta.
SS Anne