C ++ включает и импортирует разницу


Ответы:


61

#import это специфическая вещь Microsoft, по-видимому, только для COM или .NET.

#include - это стандартный оператор препроцессора C / C ++, используемый для включения файлов заголовков (или иногда другого исходного кода) в файл исходного кода.


7
Это неправда. Директива #import официально не одобрялась командой gcc в версии 3.4 и работает нормально 99% времени во всех предыдущих версиях gcc, которые поддерживают
Брайан Р. Бонди

6
... которые поддерживают #import
Брайан Р. Бонди

1
Любопытно, но я не знал об этом. Возможно, мне следовало вместо этого сказать, что это специфичная для COM и .NET вещь.
Head Geek

25
#Import, поддерживаемый gcc, - это непереносимый способ включить заголовок только один раз: <a href=" gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/…> . Он полностью не связан с Microsoft COM # import.
fizzer

3
GCC #import на самом деле является командой препроцессора Objective-C, которая работает с файлами .c в gcc и clang (кроме педантичного режима).
Майкл Моррис

83

Импорт в VC ++: #import для библиотек типов или .tlbs (материалы для COM).

Содержимое библиотеки типов преобразуется в классы C ++, в основном автоматически описывающие интерфейсы COM, а затем включается в ваш файл.

#importДиректива была введена Microsoft в качестве расширения языка C ++. Вы можете прочитать об этом в этой статье MSDN .

#importДиректива также используется .NET CLI материал /.

Импорт в gcc: импорт в gcc отличается от импорта в VC ++. Это простой способ включить заголовок не более одного раза. (В VC ++ и GCC вы также можете сделать это через #pragmaодин раз)

#importДиректива была официально undeprecated командой GCC версии 3.4 и работает отлично 99% времени во всех предыдущих версиях GCC , которые поддерживают

Включить: #include в основном для файлов заголовков, но для добавления содержимого к текущему файлу. #includeявляется частью стандарта C ++. Вы можете прочитать об этом в этой статье MSDN .


3
Ваши ссылки MSDN устарели. Спасибо Microsoft.
Марк Рэнсом

9

#importв целом решение обычного

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

обходной путь. #importвключает файл, только если он не был включен ранее.

Стоит отметить, что Apple Objective-C также использует #importутверждения.


4

import также был одним из ключевых слов, связанных с n2073, Модули в C ++ , предложенным языковому комитету Дэвидом Вандевурдом в сентябре 2006 года. Я недостаточно разбираюсь в языке, чтобы знать, было ли это предложение окончательно отложено на полку или ожидает реализации (доказательство концепции) от автора или кого-то еще ...


В то время Дэвид был сотрудником EDG, поэтому я ожидал, что у них будет такой рабочий код.
MSalters

1
Я очень надеюсь, что они проделали необходимую работу, потому что было бы очень хорошо перейти от '#include' к механизму импорта. Но я не слышал ни слова об этой функции, и я почти уверен, что ее нет в C ++ 0X. Может быть, когда-нибудь до того, как я уйду на пенсию; ^) ~
Дон Уэйкфилд

1
Как я и опасался, это будет через несколько лет: Модули в C ++ 09?
Дон Уэйкфилд,

4

Обратите внимание, что в gcc 4.1 #import он устарел. Если вы воспользуетесь им, вы получите предупреждение:

#import является устаревшим расширением GCC


Это не отвечает на вопрос.
SS Anne
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.