C ++ inclui e importa diferença

Respostas:

61

#import é uma coisa específica da Microsoft, aparentemente apenas para coisas COM ou .NET.

#include é uma instrução de pré-processador C / C ++ padrão, usada para incluir arquivos de cabeçalho (ou ocasionalmente outro código-fonte) em seu arquivo de código-fonte.

Head Geek
fonte
6
Isso não é verdade. A diretiva #import não foi oficialmente substituída pela equipe do gcc na versão 3.4 e funciona bem 99% do tempo em todas as versões anteriores do gcc com suporte
Brian R. Bondy
6
... que suportam #import
Brian R. Bondy,
1
Curioso, eu não sabia disso. Talvez eu devesse ter dito que é uma coisa específica do COM e do .NET.
Head Geek
24
O #import suportado pelo gcc é uma maneira não portável de incluir um cabeçalho apenas uma vez: <a href=" gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/…> . Não está totalmente relacionado ao Microsoft COM # importação.
fizzer
3
O GCC #import é na verdade um comando do pré-processador Objective-C que funciona com arquivos .c no gcc e clang (exceto no modo pedante).
Michael Morris
83

Importar em VC ++: #import é para bibliotecas de tipos ou .tlbs (coisas COM).

O conteúdo da biblioteca de tipos é convertido em classes C ++, principalmente descrevendo as interfaces COM para você automaticamente e, em seguida, é incluído em seu arquivo.

A #importdiretiva foi introduzida pela Microsoft como uma extensão da linguagem C ++. Você pode ler sobre isso neste artigo do MSDN .

A #importdiretiva também é usada com coisas .NET / CLI.

Importar no gcc: a importação no gcc é diferente da importação no VC ++. É uma maneira simples de incluir um cabeçalho no máximo uma vez. (Em VC ++ e GCC você pode fazer isso via#pragma uma vez)

A #importdiretiva não foi oficialmente adotada pela equipe do gcc na versão 3.4 e funciona bem 99% do tempo em todas as versões anteriores do gcc que suportam

Incluir: #include destina-se principalmente a arquivos de cabeçalho, mas para anexar o conteúdo ao arquivo atual. #includefaz parte do padrão C ++. Você pode ler sobre isso neste artigo do MSDN .

Brian R. Bondy
fonte
3
Seus links do MSDN estão desatualizados. Obrigado Microsoft.
Mark Ransom
8

#importé uma solução geral para o usual

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

Gambiarra. #importinclui um arquivo apenas se ele não tiver sido incluído antes.

Pode ser interessante notar que o Objective-C da Apple também usa #importinstruções.

Thatha
fonte
4

import também foi uma das palavras-chave associadas a n2073, Módulos em C ++ , proposta ao comitê de linguagem por Daveed Vandevoorde em setembro de 2006. Não sou um geek da linguagem para saber se essa proposta foi definitivamente arquivada ou se está aguardando uma implementação (prova de conceito) do autor ou de outra pessoa ...

Don Wakefield
fonte
Daveed era um funcionário da EDG na época, então eu esperava que eles tivessem esse código funcionando.
MSalters
1
Espero que eles tenham feito o trabalho braçal necessário, porque seria muito bom mudar de '#include' para um mecanismo de importação. Mas eu nunca ouvi falar sobre esse recurso e tenho certeza de que não está em C ++ 0X. Talvez algum tempo antes de eu me aposentar; ^) ~
Don Wakefield,
1
Como eu temia, ainda faltam alguns anos: Módulos em C ++ 09?
Don Wakefield
4

Observe que no gcc 4.1, #import está obsoleto. Se você usá-lo, receberá um aviso:

#import é uma extensão GCC obsoleta

Mike Godin
fonte
Isso não responde à pergunta.
SS Anne