• ベストアンサー
※ 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のままであることが確認できます。

質問者が選んだベストアンサー

  • ベストアンサー
  • tabide
  • ベストアンサー率44% (148/331)
回答No.3

手元のVisual Studio 2008で確かめてみました。 > その結果、灰色になりました。 その表示は、当てにならないようです。 事実、ソリューション プラットフォームを「x64」にして、 int _tmain(int argc, _TCHAR* argv[]) { #ifdef _WIN32 puts("_WIN32 is defined."); #endif #ifndef _WIN32 puts("_WIN32 is not defined."); #endif #ifdef _WIN64 puts("_WIN64 is defined."); #endif #ifndef _WIN64 puts("_WIN64 is not defined."); #endif return 0; } をコンパイル・実行してみたら、 _WIN32 is defined. _WIN64 is defined. と出力されました。 なお、VS2005ヘルプにあった。 > /D (プリプロセッサの定義) では、値 WIN32 が WIN64 に置き換えられます。 は、VS2008ヘルプでは削除されています。

参考URL:
http://msdn.microsoft.com/ja-jp/library/9yb4317s.aspx
tarocello
質問者

お礼

回答ありがとうございます。 >その表示は、当てにならないようです。 おっしゃる通りでした。   #if defined(_WIN64)     TRACE("_WIN64 is defined.\n");   #endif の3行を処理が必ず通る位置に書き、ビルドすると、やはり2行目が灰色表示になりました。 しかし、これを実行すると、出力ウィンドウに   「_WIN64 is defined.」 と表示されました。 おかげで、私の環境では「_WIN64」が勝手に定義されることがすっきり分かって安心しました。 それから、これからは灰色表示で一喜一憂しないようにします。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.2

64bitのコンパイル環境設定では、 プロジェクト毎に該当のマクロ定義を、 プリプロセスリストに追加する必要があります。 つまり、64ビット対応をはいにしても、 「勝手に追加される」のではなく、開発者が必要に応じて、 「自分で定義する」必要があるものです。

tarocello
質問者

お礼

回答ありがとうございます。 なんと、そういうものだったんですか。 質問文の「参考:」の1つ目のURLに、定義済みマクロとして載っていたので、てっきり勝手に定義されるものだと思っていました。 ただ、プリプロセッサの定義の欄の末尾に「;_WIN64」を追加してビルドしてみましたが、灰色表示は灰色のままでした。

すると、全ての回答が全文表示されます。
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

プロジェクトのプロパティでプリプロセッサの定義のところにWIN32が定義されたままかも

tarocello
質問者

お礼

回答ありがとうございます。 確認してみました。 その欄で指定していたのは、「_CRT_SECURE_NO_DEPRECATE」のみでした。

すると、全ての回答が全文表示されます。

関連するQ&A