C 如何判斷是否在編寫64位程式

2021-07-22 22:59:49 字數 1276 閱讀 8598

vc2012 下寫 windows 程式時,有時需要判斷編譯環境。在之前的文章《

判斷程式是否執行在 windows x64 系統下。

》裡說過如何在執行期間判斷系統環境,但在編譯時如何判斷?

msdn 裡說,vc 有 3 個預處理常量,分別是 _win32,_win64,win32。這三個常量如何使用呢?看起來簡單,其實是很困惑的。

在 win32 配置下,

win32 在「專案屬性-c/c++-預處理器-預處理器定義

」裡宣告了,而在 x64 配置下,這個常量並不在專案預定義列表中。這是否說明可以根據 win32 來判斷是否在 x64 平台呢?不。在 windows sdk 的 minwindef.h 下第 37 行有如下定義:

#ifndef

win32

#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 配置下執行一次)

#include

using

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...