1.WINVER和_WIN32_WINNT
Visual C++已经不再支持Windows 95, Windows 98, Windows ME, Windows NT or Windows 2000。如果你的WINVER或_WIN32_WINNT宏被指定为以上这些windows版本,你必须修改该宏。当你升级用早期版本的Visual C++写的项目,可能会碰到与WINVER或_WIN32_WINNT宏相关的兼容性错误,如果这些宏被指定为不再支持的windows版本。
在Windows 95, Windows 98, Windows ME这一分支的操作系统中,Windows的定义的版本宏是_WIN32_WINDOWS。与此同时,Windows重新开发了NT系列,且其编号从NT4.0开始,经过Windows 2000,XP, Server 2003,Vista,Server2008,Win7,Win8,Win10。 在这一分支中,Windows定义的版本宏是_WIN32_WINNT。_WIN32_WINDOWS宏便被废弃了。
WINVER是_WIN32_WINDOWS或_WIN32_WINNT的别名。在SDK的sdkddkver.h中有其定义,可见WINVER<=>_WIN32_WINNT宏的值,如下图所示:
Window各个版本对应的宏值如下图所示:
由于我用的是Win7,所以显示到win7就结束了。
2._MSC_VER
_MSC_VER 定义编译器的版本。下面是一些编译器版本的_MSC_VER值。
MS VC++ 12.0 _MSC_VER = 1800 (Visual C++ 2013)
MS VC++ 11.0 _MSC_VER = 1700 (Visual C++ 2012)
MS VC++ 10.0 _MSC_VER = 1600(Visual C++ 2010)
MS VC++ 9.0 _MSC_VER = 1500
MS VC++ 8.0 _MSC_VER = 1400
MS VC++ 7.1 _MSC_VER = 1310
MS VC++ 7.0 _MSC_VER = 1300
MS VC++ 6.0 _MSC_VER = 1200
MS VC++ 5.0 _MSC_VER = 1100
在程序中加入_MSC_VER宏可以根据编译器版本让编译器选择性地编译一段程序。例如一个版本编译器产生的lib文件可能不能被另一个版本的编译器调用,那么在开发应用程序的时候,在该程序的lib调用库中放入多个版本编译器产生的lib文件。在程序中加入_MSC_VER宏,编译器就能够在调用的时根据其版本自动选择可以链接的lib库版本,如下所示。
-
#if _MSC_VER >= 1400 // for vc8, or vc9
-
#ifdef _DEBUG
-
#pragma comment( lib, "SomeLib-vc8-d.lib" )
-
#elif
-
#pragma comment( lib, "SomeLib-vc8-r.lib" )
-
#endif
-
#elif _MSC_VER >= 1310 // for vc71
-
#ifdef _DEBUG
-
#pragma comment( lib, "SomeLib-vc71-d.lib" )
-
#elif
-
#pragma comment( lib, "SomeLib-vc71-r.lib" )
-
#endif
-
#elif _MSC_VER >=1200 // for vc6
-
#ifdef _DEBUG
-
#pragma comment( lib, "SomeLib-vc6-d.lib" )
-
#elif
-
#pragma comment( lib, "SomeLib-vc6-r.lib" )
-
#endif
-
#endif
参考链接:https://msdn.microsoft.com/en-us/library/6sehtctf.aspx
参考链接:http://www.cnblogs.com/zhcncn/archive/2013/05/21/3091052.html
参考链接:https://blog.csdn.net/caoshangpa/article/details/52807929