2

Visual Studioコンパイラ(2005〜2008)は、x86/x64ビット環境用に4つのマクロを定義しています。事前定義されたマクロを参照してください

  • _M_X64x64プロセッサ用に定義されています。
  • _M_IX86x86プロセッサ用に定義されています。詳細については、以下の_M_IX86テーブルの値を参照してください。これは、x64プロセッサでは定義されていません。
  • _WIN32Win32およびWin64のアプリケーション用に定義されています。常に定義されます。
  • _WIN64Win64のアプリケーション用に定義されています。

x32ビットマシンでは、_M_X64が設定されることはありません。64ビットマシンでは、32ビット環境でビルドしている場合、_M_X64は設定解除され、_M_IX86が定義されます。_WIN32は、32/64ビットビルドに関係なく常に定義されます。

すべてのx64プロセッサで、_M_X64に特別な意味はありますか?ターゲットがx64のときに_M_X64が未定義のシナリオはありますか?

4

1 に答える 1

7

x32ビットマシンでは、_M_X64が設定されることはありません

それはそれがどのように機能するかではありません。使用するコンパイラは、特定のターゲットアーキテクチャのコードを生成します。マシンは関係ありません。32ビットマシンでx64コードを生成することは非常に可能です。MSVCには、32ビットオペレーティングシステムで実行してx64のコードを生成できるクロスコンパイラが含まれています。また、x64コードを生成する64ビットコンパイラがあります。IDEは、OSに関係なく、実際にクロスコンパイラを使用するように設定されています。

これらのコンパイラvc\binは、VSインストールディレクトリのサブディレクトリであるマシンにインストールされていることがわかります。そのディレクトリには、x86コードを生成する32ビットコンパイラが含まれています。x86_amd64サブディレクトリには、x64コードを生成する32ビットコンパイラがあります。amd64サブディレクトリには、x64コードを生成する64ビットコンパイラがあります。ARMコア用のコンパイラがある場合は、そこに追加のディレクトリが存在する可能性があります。これは常にクロスコンパイラです。

あなたが尋ねるマクロ名は事前定義されたマクロです、完全なリストはここにあります。_M_X64マクロは、x64コードを生成するコンパイラーによって常に定義されます。

于 2012-08-24T14:09:33.023 に答える