我们经常需要将同一个代码文件在不同的编译器下编译,实际上对应着不同的代码,这个时候就可以使用宏定义来进行判断,比如如下代码:
#if _MSC_VER >=1900 // VS2015或者以上
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#endif
只有在VS2015或者以上的版本中,中间的代码才生效,那么实际上我们可能需要对很多不同的编译器版本进行判断,于是下方我整理了我们常常需要判断的VS的编译器版本。
1、VS各版本与MSVC对照表
IDE 发布时间 发布时间 工具集版本 MSC_VER
Visual C++6.0 1998 1998 V60 1200 MSVC++ 6.0
Visual Studio 2002 2002 V70 1300 7.0
Visual Studio 2003 2003 V71 1310 7.1
Visual Studio 2005 2005 V80 1400 8.0
Visual Studio 2008 2008 V90 1500 9.0
Visual Studio 2010 2010 V100 1600 10.0
Visual Studio 2012 2012 V110 1700 11.0
Visual Studio 2013 2013 V120 1800 12.0
Visual Studio 2015 2015 V140 1900 14.0
Visual Studio 2017 2017 V141 1910 14.1
Visual Studio 2019 2019 V142 1920 14.2
Visual Studio 2022 2022 V143 1930 14.3
举例:
template <typename T>
inline void* CStdTpl::ConvertFromString(T &value, const _tstring &s)
{
#ifdef _UNICODE
std::wstringstream ss(s);
#else
std::stringstream ss(s);
#endif
#if _MSC_VER >=1900 // VS2015或者以上
ss >> value;
return &value;
#else
return ss >> value;
#endif
}
欢迎交流与讨论。