What is the difference between #include
and #import
in C++?
问题:
回答1:
#import
is a Microsoft-specific thing, apparently for COM or .NET stuff only.
#include
is a standard C/C++ preprocessor statement, used for including header (or occasionally other source code) files in your source code file.
回答2:
Import in VC++: #import
is for type libraries or .tlbs (COM stuff).
The content of the type library is converted into C++ classes, mostly describing the COM interfaces for you automatically, and then it is included into your file.
The #import
directive was introduced by Microsoft as an extension to the C++ language. You can read about it at this MSDN article.
The #import
directive is also used with .NET / CLI stuff.
Import in gcc:
The import in gcc is different from the import in VC++. It is a simple way to include a header at most once only. (In VC++ and GCC you can do this via #pragma
once as well)
The #import
directive was officially undeprecated by the gcc team in version 3.4 and works fine 99% of the time in all previous versions of gcc which support
Include: #include
is for mostly header files, but to prepend the content to your current file. #include
is part of the C++ standard. You can read about it at this MSDN article.
回答3:
#import
is overall a solution to the usual
#ifndef ...
#define ...
#include ...
#endif
work-around. #import
includes a file only if it hasn't been included before.
It might be worth noting that Apple's Objective-C also uses #import
statements.
回答4:
import was also one of the keywords associated with n2073, Modules in C++, proposed to the language committee by Daveed Vandevoorde in September 2006. I'm not enough of a language geek to know if that proposal was definitively shelved or if it's awaiting an implementation (proof of concept) from the author or someone else...
回答5:
Please note that in gcc 4.1, #import
is deprecated. If you use it, you will get warning:
#import
is a deprecated GCC extension