【问题标题】:Does _MSC_VER depend on toolkit version?_MSC_VER 是否依赖于工具包版本?
【发布时间】: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_VER1600。)

#warning 指令不是阻塞编译器的东西吗?

是不是 IntelliSense 没有选择工具包版本,而是始终假定 _MSC_VER1800

【问题讨论】:

  • 据我所知,VS2010 没有与 VS2012 相同的 Intellisense 引擎,后来我猜它使用 VS2013 进行 解析
  • 所以这是一个 IntelliSense 错误?

标签: c++ visual-studio-2013


【解决方案1】:

_MSC_VER 直接绑定到工具包,而不是 IDE。

有缺陷的 Intelisense 在 VS2012 中的行为也相同(使用 Vs2010 工具包)...

【讨论】:

  • 这就是我想确认的——不想忽略一个真正的错误。我会报告这个错误,看看它是否可能得到修复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 2017-01-16
  • 1970-01-01
  • 2019-05-06
  • 2014-03-06
相关资源
最近更新 更多