メインコンテンツへスキップ
XBOX 用のコンパイラは、Visual Studio に付属している Visual C++ x64 コンパイラです。Visual Studio 2022 (17.12 または 17.14) か、最新の Visual Studio 2026 更新プログラムを使用してください。 XBOX 開発では、clang/LLVM for Windows v11 以降もサポートされています。このツールセットは Visual C/C++ ランタイムを使用します。MSBuild を使用する場合は、Visual Studio 2019 または Visual Studio 2022 の clang/LLVM 統合を使用してください。 その他のツールセットとランタイムの組み合わせでは、実行できないか、認定に合格しない可能性があります。 Visual C++ コードのアップグレードの詳細については、「Visual C++ 移植およびアップグレード ガイド」を参照してください。
XBOX ツールは、デバッグ シンボルとして Microsoft Program Database (PDB) ファイルでのみ動作します。LLVM の .ld ファイルが出力する CodeView または DWARF のデバッグ情報はサポートされていません。

C++14、C++17、C++20 の言語バージョンと機能

Visual Studio 2019、Visual Studio 2022、Visual Studio 2026 は C++11、C++14、C++17 をサポートしています。Visual Studio 2022 と Visual Studio 2026 は C++20 もサポートしています。

組み込み関数

Visual C++ コンパイラは x64 インライン アセンブリをサポートしていませんが、XBOX 開発で特殊な命令セットを利用できるよう、さまざまな組み込み関数をサポートしています。
組み込み関数を使用する場合は、ターゲット プラットフォームがその命令をサポートしていることを事前に確認していることが前提となります。サポートを確認しない場合、アプリは実行時に invalid instruction 例外をスローします。特に、XBOX One (AMD Jaguar CPU) は AVX と F16C をサポートし、XBOX Series X|S (AMD Hercules CPU) はさらに AVX2 と FMA3 もサポートしている点に注意してください。どちらのプラットフォームも AVX-512 以降の命令はサポートしていません。
Visual Studio は /arch:AVX および /arch:AVX2 スイッチをサポートしています。これらのスイッチにより、AVX 命令セット標準の一部である VEX プレフィックスを使用できるようになります。すべての XBOX アプリケーションでこのスイッチを使用してください。詳細については、次の記事を参照してください。

clang/LLVM の組み込み関数

clang/LLVM for Windows ツールセットは MSVC と同じ組み込み関数の多くを実装していますが、いくつかの重要な違いがあります。
  • clang/LLVM と GNUC は、SSE SIMD 型を Visual C++ や Intel Compiler とは異なる方法で扱います。具体的には、__m128、__m128i、__m128d 型は構造体ではなく不透明型であるため、これらの型を使用する C++ のオーバーロード関数を作成することはできません。この違いにより、__m128.m128_f32[0] による要素への直接アクセスも clang/LLVM ではコンパイルされません。
このため、DirectXMath は clang/LLVM を使用してビルドする場合に _XM_NO_XMVECTOR_OVERLOADS_ を定義します。移植性を高めるために、コード内でこのマクロを明示的に定義して、MSVC でも同様に適用することができます。
  • clang/LLVM の cpuid 組み込み関数は、特別なヘッダー #include <cpuid.h> を使用します。__cpuid 組み込み関数は異なるパラメーター リストを受け取り、__cpuid_count は MSVC の __cpuidex に相当しますが、こちらもパラメーター リストが異なります。

呼び出し規約

x64 ネイティブ コードの既定の呼び出し規約は __fastcall です。詳細は Microsoft Docs に記載されています。x64 では、__cdecl および __stdcall 呼び出し規約は __fastcall の単なるエイリアスです。 MSVC および clang/LLVM コンパイラは、x86 および x64 コード向けに __vectorcall 呼び出し規約をサポートしています。詳細については、 Visual C++ Team Blog: Introducing ‘Vector Calling Convention’ および Microsoft Docs を参照してください。

自動ベクター化と自動並列化

Visual C++ オプティマイザーは、自動ベクター化機能によって、スカラーの整数演算や浮動小数点演算を SIMD 命令に変換できます。自動ベクター化は /O2 または /Ox で自動的に有効になります。#pragma loop(no_vector) を使用すると、特定のループに対して無効にできます。 これらのコンパイラ ツールセットは、スレッドを使用したループの自動並列化もサポートしています。自動並列化は /Qpar を使用して有効にします。#pragma (loop(hint_parallel(n))) を使用すると、特定のループに対してヒントを指定できます。詳細については、次の記事を参照してください。

バグの報告

Visual C++ コンパイラのバグは、(可能であれば) Visual Studio の [問題の報告…] から報告してください。Microsoft Docs および Developer Community Web サイトを参照してください。コンパイラ向けの適切なバグ レポートの作成方法の詳細については、このページを参照してください。
問題を再現するために NDA 対象の追加情報が必要な場合は、“Microsoft only” とマークしたコメントを公開レポートに追加できます。
clang/LLVM for Windows コンパイラのバグ報告には、https://bugs.llvm.org/ を使用してください。 Microsoft Standard C++ Library (STL とも呼ばれます) のバグ報告には、https://github.com/microsoft/STL/issues を使用してください。 いつものように、エスカレーションが必要な重大な問題については、お気軽にアカウント マネージャーにお問い合わせください。

リソース

最終更新日 2026年10月20日