我正在使用原生C ++在Visual Studio 2008中工作。
一位同事写了一个图书馆,并命名了他的一个班级interface
。这是一个构造函数:
template <typename DtedInterface>
interface<DtedInterface>::interface (
std::string const& tleFile,
std::string const& dtedDir,
dted::DtedLevel const& dtedLevel,
double sw_latitude,
double sw_longitude,
unsigned int rows,
unsigned int columns )
: m_impl ( new interface_impl<DtedInterface> ( theFile, dtedDir, dtedLevel, sw_latitude, sw_longitude, rows, columns ) )
{}
我关注的是Visual Studio 2008将单词interface
突出显示为关键字; interface
是C ++ / CLI中的关键字,但不是C ++。这看起来不像是有效的C ++ / CLI,但它适用于原生C ++。
看起来它们编译得很好,但是我如何确保Visual Studio将其解释为C ++而不是C ++ / CLI?在某些级别,VS似乎将其视为C ++ / CLI。它只是一个突出显示设置的关键字吗?
答案 0 :(得分:7)
Visual Studio IDE和Visual C ++编译器是两个独立的实体。具体来说,它们是两个独立的可执行文件(IDE的devenv.exe
和编译器的cl.exe
,它们作为单独的进程运行。 IDE只会生成cl.exe
进程以执行实际编译。
IDE有一个关键字列表,它只是告诉文本编辑器要突出显示的单词。它不是超级复杂;它不一定是。编译器有最终决定权,而不是语法高亮显示器(或Intellisense)。
只要/clr
switch没有传递给cl.exe
进程,编译器就会将代码编译为本机C ++(这是默认设置)。 IDE只是输入源代码的文件路径,编译器作为命令行参数切换到cl.exe
进程。语法高亮与编译器如何解释代码无关。
答案 1 :(得分:3)
如果您使用的是C ++ / CLI,代码将拒绝编译,因此只要您按下“build”并且它正常工作,那么您就知道自己是原生的。还有用于CLR构建的预定义宏。
答案 2 :(得分:1)
如果您确实需要验证它没有编译托管C ++,请查看项目属性并检查Configuration Properties-&gt; General下的“Common Language Runtime support”设置。对于Configuration Properties-&gt; C / C ++ - &gt; General下的每个文件的属性,请检查“使用公共语言运行时支持进行编译”设置。如果所有这些都设置为“无公共语言运行时支持”,则该项目不是托管C ++。