My friends, my life, my style - James S.F. Hsieh

3/02/2009

x64 Part 4: Survey C/C++ code analyzer for detect 64-bit portability issues

Microsoft VC++ 2005 /Wp64 最簡單的方式是使用 VC++2005 內建的 analyzer, 可以在 "Project property pages\Configuration properties\C/C++\Detect 64-bit portability issues" 來 Enable 這個選項 /Wp64, 它是是利用一個特殊的修飾字 _W64 與指標與數值間的轉換來檢查 x86 migration 到 x64 的相容性. 這個關鍵的修飾字會告知 analyzer 某個在 x86 下的 type 在 x64 下大小會改變, 利用這樣的描述來找尋潛在可能的錯誤, 不過這個功能在 VC++ 2008 已經被拿掉了, 舉個例子:

// typedefs #ifdef _WIN64 typedef unsigned __int64 size_t; #else typedef _W64 unsigned int size_t; #endif

以下的程式碼就會被檢查出錯誤, 但是檢查的功能可以說是非常的局限

size_t size = 10; DWORD value = size; // warning C4244: 'initializing' : // conversion from '__w64 int' to 'DWORD', possible loss of data

以下還有幾個可以診斷這類型錯誤的工具 Viva64, Gimpel PC-Lint, Parasoft C++test™, CodeCheck 當然, 這些工具都要價不斐, 以 Viva64 為例, Standard License 一年要 €3500, 相當於 NT 154820.