【发布时间】:2013-12-22 20:29:00
【问题描述】:
我正在针对使用 Visual Studio 2010 编译的 Ruby 库编写一个 Ruby C 扩展。(我无法更改这一点,或重新编译我正在构建的 Ruby 核心,因为它嵌入在第三方应用程序中。)
我的项目开始于 Visual Studio 2010,但后来我开始使用 Visual Studio 2013 而不升级项目 - 所以它仍在使用 VS2010 工具包。
在我需要使用的 Ruby 包含标头中有一个检查:
#if _MSC_VER != 1600
#error MSC version unmatch: _MSC_VER: 1600 is expected.
#endif
现在,我认为由于我的项目使用的是 VS2010 工具包,因此在 VS2013 中仍然可以通过此检查。这就是我感到困惑的地方:
该解决方案构建并创建了 .so 文件,该文件有效,输出中没有警告或错误,但我刚刚发现错误列表显示了警告。 IntelliSense 将为 _MSC_VER 显示 1800 - 但它会编译。
1 IntelliSense: #error directive: MSC version unmatch: _MSC_VER: 1600 is expected. c:\Users\Thomas\Documents\subd\ThirdParty\include\ruby\win32\i386-mswin32_100\ruby\config.h 4
那么这里发生了什么?
当我的工具包设置为v100 时,Visual Studio 不是使用 VS2010 编译器吗? (那么我希望_MSC_VER 是1600。)
#warning 指令不是阻塞编译器的东西吗?
是不是 IntelliSense 没有选择工具包版本,而是始终假定 _MSC_VER 是 1800?
【问题讨论】:
-
据我所知,VS2010 没有与 VS2012 相同的 Intellisense 引擎,后来我猜它使用 VS2013 进行 解析。
-
所以这是一个 IntelliSense 错误?