※ ChatGPTを利用し、要約された質問です(原文:なぜマクロ「_WIN64」が未定義になるの?(Visual C++))
なぜマクロ「_WIN64」が未定義になるの?(Visual C++)
このQ&Aのポイント
32bitアプリケーションを64bit化する際、Visual C++のマクロ「_WIN64」が未定義になってしまう現象が発生しています。ビルド時に灰色表示されることで確認できます。
マクロが未定義になる原因は明確ではありませんが、Windows XP Professional x64 Editionの環境やVisual Studio 2008 Professional Editionの開発環境などが影響している可能性があります。
マクロが未定義になることで64bitアプリケーションとしての機能を利用することができず、sizeof(int*)の値が「8」になることからもアプリケーションのビット数が32bitのままであることが確認できます。
なぜマクロ「_WIN64」が未定義になるの?(Visual C++)
下記環境で、32bitアプリケーションの64bit化をしようとしました。
OS :Windows XP Professional x64 Edition
開発環境:Visual Studio 2008 Professional Edition
言語 :Visual C/C++
その際のビルドは、構成マネージャのアクティブソリューションプラットフォームを「x64」に設定してから行いました。
ところが、64bitアプリケーションなら定義されるはずの「_WIN64」というマクロが未定義になってしまいます。
なぜなのか、教えて欲しいです。
ちなみに、マクロが未定義かどうかは、
#if defined(_WIN64)
#define test
#endif
の2行目がビルド後、灰色表示になるかどうかで確かめました。
その結果、灰色になりました。
さらに、補足ですが
64bitアプリケーションになっているかを確かめるため、
sizeof(int*)の値を確認したところ、
その値は「8」でした。
参考:
[MSDN Visual C++ デベロッパー センター]
http://msdn.microsoft.com/ja-jp/library/b0084kay.aspx
http://msdn.microsoft.com/ja-jp/library/9yb4317s(VS.80).aspx
お礼
回答ありがとうございます。 >その表示は、当てにならないようです。 おっしゃる通りでした。 #if defined(_WIN64) TRACE("_WIN64 is defined.\n"); #endif の3行を処理が必ず通る位置に書き、ビルドすると、やはり2行目が灰色表示になりました。 しかし、これを実行すると、出力ウィンドウに 「_WIN64 is defined.」 と表示されました。 おかげで、私の環境では「_WIN64」が勝手に定義されることがすっきり分かって安心しました。 それから、これからは灰色表示で一喜一憂しないようにします。 ありがとうございました。