vc2012 下寫 windows 程式時,有時需要判斷編譯環境。在之前的文章《
判斷程式是否執行在 windows x64 系統下。
》裡說過如何在執行期間判斷系統環境,但在編譯時如何判斷?
msdn 裡說,vc 有 3 個預處理常量,分別是 _win32,_win64,win32。這三個常量如何使用呢?看起來簡單,其實是很困惑的。
在 win32 配置下,
win32 在「專案屬性-c/c++-預處理器-預處理器定義
」裡宣告了,而在 x64 配置下,這個常量並不在專案預定義列表中。這是否說明可以根據 win32 來判斷是否在 x64 平台呢?不。在 windows sdk 的 minwindef.h 下第 37 行有如下定義:
#ifndefwin32
#define
win32
#endif
即是說,只要包含了 windows.h,那麼 win32 常量是肯定定義了的,所以不能用於判斷平台環境。但是如果在預處理定義裡刪掉 win32,又不包含 windows.h,那麼 win32 未定義。
下面看 _win32 和 _win64,這兩個比較特別,沒有任何顯式定義。在 windows.h 裡沒有,在
「專案屬性-c/c++-預處理器-預處理器定義
」下也沒有。根據 msdn,這是由編譯器(ml.exe/ml64.exe)內部定義的。具體描述是
always defined.
_win64:
下面看一段程式:(分別在 win32 和 x64 配置下執行一次)
#includeusing
namespace
std;
intmain
()
在 win32 配置下,_win32 有定義,_win64 沒有定義。在 x64 配置下,兩者都有定義。即在 vc 下,_win32 一定有定義。
因此,win32/_win32 可以用來判斷是否 windows 系統(對於跨平台程式),而 _win64 用來判斷編譯環境是 x86 還是 x64。最後附乙個表:
常量\定義
預定義選項
windows.h
vc編譯器
win32
win32
√(minwindef.h)
×_win32××
√_win64××
x64
判斷是否是64位作業系統
在看乙個外國佬的 的時候,看到乙個api函式,然後隨手查了查msdn,原來是新加的用來判斷是否是win64位系統的,於是寫了乙個函式用來判斷是否是64位作業系統 1function iswin64 boolean 2var 3kernel32handle thandle 4iswow64proces...
判斷機器 程式是32位還是64位
一 linux上如何知道自己的作業系統 計算機 是32位還是 64位的?linux users should type the uname command.depending on the platform,you may see linux gaylord.stata.com 2.6.11 1.2...
c 判斷系統32位還是64位
判斷系統是否是64位的方法有很多。對於c 來說,呼叫wmi是一種簡單易行的方式。我們可以用win32 processor類裡面的addresswidth屬性來表示系統的位寬。addresswidth的值受cpu和作業系統的雙重影響。具體的值如下面的 所示 32bit os 64bit os 32bi...