Visual c++ Visual Studio:如何检查使用的C++;编程平台工具集

Visual c++ Visual Studio:如何检查使用的C++;编程平台工具集,visual-c++,preprocessor,multiplatform,Visual C++,Preprocessor,Multiplatform,我必须使用MSVC2012和v100平台工具集(来自MSVC2010)构建项目。不幸的是,我在代码中使用了C++11特性“基于范围的”。我想知道是否有一个预处理器指令允许在编译时了解当前的平台工具集。即 #if (_MSC_PLATFORM_TOOLSET > 100) # define ALLOW_RANGE_BASED_FOR 1 #else # define ALLOW_RANGE_BASED_FOR 0 #endif 我尝试使用\u MSC\u VER宏,但对于两个平台工

我必须使用MSVC2012和v100平台工具集(来自MSVC2010)构建项目。不幸的是,我在代码中使用了C++11特性“基于范围的”。我想知道是否有一个预处理器指令允许在编译时了解当前的平台工具集。即

#if (_MSC_PLATFORM_TOOLSET > 100)
#   define ALLOW_RANGE_BASED_FOR 1
#else
#   define ALLOW_RANGE_BASED_FOR 0
#endif
我尝试使用\u MSC\u VER宏,但对于两个平台工具集,它都设置为1700(这是有意义的,因为我仍然在使用MSVC2012)。
如果有任何建议,我将不胜感激。谢谢。

我遇到了同样的问题,并为
\u MSC\u PLATFORM\u工具集添加了自己的预处理器定义

在中的项目属性中

  • 信用证++
  • 预处理器
  • 预处理器定义
添加\u MSC\u PLATFORM\u TOOLSET=$(PlatformToolsetVersion)使Visual Studio将当前工具集的版本集成到预处理器,以便查询

#if (_MSC_PLATFORM_TOOLSET > 100)
...
#endif

将最终工作。

\u MSC\u FULL\u VER
对于每个平台工具集是不同的;和Visual Studio的版本。对于(当前)Visual Studio 2013预览版,它是
180020617
。对于具有2012年11月编译器CTP的VisualStudio2012(它提供了一些C++11),它是
170060315
。与
\u MSC\u VER
一样,每个版本的Visual Studio的前4位数字都相同;对于Visual Studio 2012,它们总是
1700
。下面是一个例子:

#ifdef _MSC_FULL_VER
  #if   _MSC_FULL_VER == 170060315
  // MSVS 2012; Platform Toolset v110
  #elif _MSC_FULL_VER == 170051025
  // MSVS 2012; Platform Toolset v120_CTP_Nov2012
  #elif _MSC_FULL_VER == 180020617
  // MSVS 2013; Platform Toolset v120
  #endif
#endif // _MSC_FULL_VER

当我用VisualStudio开发C或C++时,我需要知道两个版本号。这些是VisualStudio主要版本号和“cl”编译器主要/次要版本

Visual Studio版本号显示在“关于”对话框中。例如,对于VS2012,我看到“Version11.0.60610.01”,所以主要版本号是“11”

构建工具,如或将创建针对Visual Studio主版本的解决方案文件

编译器“主要/次要”版本是_MSC_VER宏的值。 这里有一个小程序可以显示:

#include <stdio.h>
/*
 * Compile and run this on a Visual Studio platform to get
 * the version identifier.
 */
#define PRINT_INT_MACRO(m) (printf("%s: \"%d\"\n", #m, m))

int
main() {
    PRINT_INT_MACRO(_MSC_VER);
      return 0;
}
#包括
/*
*在VisualStudio平台上编译并运行它,以获得
*版本标识符。
*/
#定义PRINT_INT_宏(m)(printf(“%s:\%d\”\n“,#m,m))
int
main(){
打印INT宏(MSC版本);
返回0;
}
正如注释所说,您必须使用所需的编译器实际编译它 测试。为了省事,这里有一张小桌子:

Name Version _MSC_VER VS 6 6.0 1200 VS 2002 7.0 1300 VS 2003 7.1 1310 VS 2005 8.0 1400 VS 2008 9.0 1500 VS 2010 10.0 1600 VS 2012 11.0 1700 VS 2013 12.0 1800 VS 2015 13.0 1900 名称版本\u MSC\u版本 VS 6.0 1200 VS 2002 7.0 1300 VS 2003 7.1310 VS2005 8.0 1400 VS 2008 9.0 1500 VS 2010 10.0 1600 VS 2012 11.0 1700 与2013年相比12.0 1800 VS 2015 13.0 1900
希望这有帮助

我不知道他们是否已经在VS2015中修复了它,但它确实按照预期工作

我创建了以下小程序:

#include <iostream>
using namespace std;

int main()
{
    cout << "_MSC_VER: " << _MSC_VER << endl;
    cout << "_MSC_FULL_VER: " << _MSC_FULL_VER << endl;
    cout << "_MSC_BUILD: " << _MSC_BUILD << endl;

    (void) getchar();

    return 0;
}
#包括
使用名称空间std;
int main()
{

不可能。
\u MSC\u VER
是IDE的版本,而不是目标平台工具集的版本。您可以通过指定“平台工具集=v100”在VS 2015中使用2010编译器进行编译注意:VS2015实际上是14.0…跳过了13.0。+10。如果您需要支持不同的平台工具集,例如,如果typedef在100中定义,而不是在90中定义,则这是唯一正确的版本。