Visual StudioにてC / C++のプログラミングをする際に、32bit向けと64bit向けでコードを変えたくなる場合がある。切り替え自体は当然#ifdefでやるのだが、どの定数で判定するのが良いのだろうか?以下、整理してみた。情報ソースはマイクロソフトの以下記事。
- _WIN32
x86, x64, 32bitARM, 64bitARMのときに1。64bitでも1な点に注意。Windows環境のときのみ何かしたい場合に有用? - _WIN64
x64, 64bitARMのときに1。Windows環境かつ64bit環境のときのみ何かしたい場合に有用。 - _M_IX86
x86のときに600。x86のときのみ何かしたい場合に有用。ARM他は別途判定が必要。 - _M_X64
x64のときに100。x64のときのみ何かしたい場合に有用。ARM他は別途判定が必要。 - _M_ARM, _M_ARM64, _M_ARM_ARMV7VE, M_AMD64
名前から察してください。なおAMD64はAMD専用プログラムにする場合のみ指定?Intel/AMD両方用なら_M_X64を指定するのが正しそう。