關於VS中區分debug與release,32位與64位編譯的巨集定義

Sunday發表於2014-04-23
在vs程式設計中,常常涉及到32位和64位程式的編譯,怎麼判斷當前編譯是32位編譯還是64位編譯?如何判斷

是debug下編譯還是release下編譯?因為之前用到,這裡記錄一下,省的忘了又要瘋狂的google。

1.判斷是debug編譯還是release編譯。
如果_DEBUG定義了表示是debug編譯,否則是release編譯。

2.判斷是32位編譯還是64位編譯。
在 Win32 配置下,_WIN32 有定義,_WIN64 沒有定義。在 x64 配置下,兩者都有定義。即在 VC 下,_WIN32 一定有定義。
因此,WIN32/_WIN32 可以用來判斷是否 Windows 系統(對於跨平臺程式),而 _WIN64 用來判斷編譯環境是 x86 還是 x64。附一個表:

常量\定義預定義選項Windows.hVC編譯器
WIN32Win32√(minwindef.h) ×
_WIN32××
_WIN64××x64
   
最後附上根據相應編譯情況,進行有條件的連結相應靜態庫的示例程式碼,其實就是一些巨集定義語句的使用:

#include "json/json.h"
#ifdef _DEBUG
#ifndef _WIN64
#pragma comment(lib,"json/json_mtd.lib")
#else
#pragma comment(lib,"json/json_mtd_x64.lib")
#endif
#else
#ifndef _WIN64
#pragma comment(lib,"json/json_mt.lib")
#else
#pragma comment(lib,"json/json_mt_x64.lib")
#endif
#endif
using namespace Json;


_MSC_VER 定義編譯器的版本。下面是一些編譯器版本的_MSC_VER值:
MS VC++ 10.0 _MSC_VER = 1600
MS VC++ 9.0 _MSC_VER = 1500
MS VC++ 8.0 _MSC_VER = 1400

其中MS VC++ 10.0就是Visual C++ 2010,MS VC++ 9.0就是Visual C++ 2008,MS VC++ 8.0就是Visual C++ 2005。

相關文章