С ++ включає та імпортує різницю


Відповіді:


61

#import є специфікою Microsoft, очевидно, лише для COM чи .NET.

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


6
Це не правда. Директива #import була офіційно непристосована командою gcc у версії 3.4 і чудово працює у 99% випадків у всіх попередніх версіях gcc, які підтримують
Брайан Р. Бонді,

6
... які підтримують # імпорт
Брайан Р. Бонді

1
Цікаво, я цього не знав. Можливо, я повинен був сказати, що це специфічна для COM- та .NET річ.
Head Geek

24
#Import, що підтримується gcc, - це непереносимий спосіб включити заголовок лише один раз: <a href=" gcc.gnu.org/onlinedocs/gcc-4.3.2/cpp/…> . Він абсолютно не пов’язаний з Microsoft COM # імпорт.
fizzer

3
GCC #import насправді є командою препроцесора Objective-C, яка працює з файлами .c у gcc та clang (крім педантичного режиму).
Michael Morris

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.
Марк Ренсом

8

#importє загальним рішенням звичного

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

обхід. #importвключає файл, лише якщо він раніше не був включений.

Варто зауважити, що Objective-C від Apple також використовує #importтвердження.


4

імпорт також було одним із ключових слів, пов’язаних із 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.