關於VS中區分debug與release,32位與64位編譯的巨集定義
在vs程式設計中,常常涉及到32位和64位程式的編譯,怎麼判斷當前編譯是32位編譯還是64位編譯?如何判斷
是debug下編譯還是release下編譯?因為之前用到,這裡記錄一下,省的忘了又要瘋狂的google。
是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.h | VC編譯器 |
WIN32 | Win32 | √(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++ 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。
相關文章
- linux下debug與release編譯的方法Linux編譯
- 一個C++巨集定義與列舉定義重複的編譯錯誤C++編譯
- VS2008 Debug與Release的本質區別
- [cmake]如何設定Debug和Release編譯模式編譯模式
- kernel 增加自定義巨集編譯開關編譯
- gcc編譯階段列印巨集定義的內容GC編譯
- C語言學習第18篇---巨集定義與使用 / 條件編譯使用分析C語言編譯
- VC中debug和release版本的區別
- 關於malloc原始碼中的bin_at巨集定義的個人見解原始碼
- Debug和Release的區別
- iOS中 Debug 和 Release 的區別和使用iOS
- 【C進階】21、巨集定義與使用分析
- 一個有趣的現象(蘋果的bug Or 坑?),關於區分真機和模擬器的預編譯巨集蘋果編譯
- 關於 VC 編譯的猜想與試驗 (轉)編譯
- postgresql與oracle關於事務定義的描述SQLOracle
- 關於非同步方法中的巨集任務與微任務非同步
- c#中Debug和Release的區別實驗C#
- C 語言巨集定義 #define 的理解與資料整理
- define巨集定義和const常量定義之間的區別
- C++中巨集定義#define的用法C++
- oracle中關於null的定義OracleNull
- MySQL中普通sql與預編譯sql 區別MySql編譯
- 關於 in與exist , not in與not exist 的區別
- Windows:Debug和Release build區別WindowsUI
- Android模組化與元件化–多模組區分編譯Android元件化編譯
- Android模組化與元件化--多模組區分編譯Android元件化編譯
- 巨集定義和列舉型別的區別型別
- c 語言中巨集定義和定義全域性變數的區別變數
- 【譯】Rust巨集:教程與示例(二)Rust
- 【譯】Rust巨集:教程與示例(一)Rust
- #define巨集與列舉以及typedef關鍵字的區別
- [Web翻譯]JavaScript中的編譯與填充WebJavaScript編譯
- Swift 裡的巨集定義Swift
- 關於mysql中欄位定義的型別int、tinyint區別MySql型別
- flutter release版編譯Flutter編譯
- 關於js中的‘==’ 與 ‘===’JS
- 關於mybatis中的resultType與resultMap用法及誤區MyBatis
- iOS開發:pch檔案中的巨集定義iOS