2009-11-06 55 views
4

在Visual C++ 9中有__w64這樣的東西。我在試圖將我的本機C++ DLL移植到64位時碰到它。尤其是在crtdefs.h有這個漂亮的片段:如何在VC++中使用_W64和__w64?

#if !defined(_W64) 
#if !defined(__midl) && (defined(_X86_) || defined (_M_IX86)) && _MSC_VER >= 1300 
#define _W64 __w64 
#else 
#define _W64 
#endif 
#endif 

它,如果我得到它的權利意味着,對於64位_W64被定義爲一個空字符串,並沒有任何影響,但對於32位被定義爲__w64

我嘗試將_W64依次定義爲空字符串和__w64,並且至少兩次項目在64位配置中都編譯好。

即表示_W64__w64看起來沒用。我打算如何使用它們以及如何在64位項目中定義_W64

回答

2

答案是,你沒有。這是32位編譯器使用的編譯器功能。最初的想法是,微軟希望爲即將到來的32-> 64位轉換準備程序員。因此,32位編譯器可以將某些類型定義標記爲__w64。微軟然後使用該能力來標記在Win64中會改變的typedef。

9

__w64用於標記在32位和64位環境中具有不同大小的類型。編譯器可能會在您將一個maybe-64bit類型分配給一個32位類型時發出警告。

如果將MSDN: __w64視圖切換爲最新版本,則可以看到該關鍵字已被棄用。當您嘗試使用/ Wp64選項進行編譯時,VC9甚至會生成警告。