Passer au contenu principal
Le compilateur pour XBOX est le compilateur Visual C++ x64 fourni avec Visual Studio. Utilisez Visual Studio 2022 (17.12 ou 17.14) ou la dernière mise à jour de Visual Studio 2026. Le développement XBOX prend aussi en charge clang/LLVM pour Windows v11 ou version ultérieure. Cet ensemble d’outils utilise le runtime Visual C/C++. Si vous utilisez MSBuild, utilisez l’intégration clang/LLVM de Visual Studio 2019 ou de Visual Studio 2022. D’autres combinaisons d’ensembles d’outils et de runtimes risquent de ne pas fonctionner ou de ne pas réussir la certification. Pour plus de renseignements sur la mise à niveau du code Visual C++, consultez le Visual C++ Porting and Upgrading Guide.
Les outils XBOX fonctionnent uniquement avec les fichiers Microsoft Program Database (PDB) pour les symboles de débogage. Ils ne prennent pas en charge les informations de débogage CodeView ou DWARF émises par les fichiers .ld de LLVM.

Versions et fonctionnalités des langages C++14, C++17 et C++20

Visual Studio 2019, Visual Studio 2022 et Visual Studio 2026 prennent en charge C++11, C++14 et C++17. Visual Studio 2022 et Visual Studio 2026 prennent aussi en charge C++20.

Intrinsèques

Le compilateur Visual C++ ne prend pas en charge l’assembleur inline x64, mais prend en charge une grande variété d’intrinsèques permettant d’utiliser des jeux d’instructions spécialisés pour le développement XBOX.
Toute utilisation d’intrinsèques suppose que vous avez déjà vérifié que la plateforme cible prend en charge les instructions. Si vous ne le vérifiez pas, l’application lève des exceptions invalid instruction à l’exécution. Notez en particulier que la XBOX One (processeur AMD Jaguar) prend en charge AVX et F16C, et que les XBOX Series X|S (processeur AMD Hercules) prennent aussi en charge AVX2 et FMA3. Aucune de ces plateformes ne prend en charge AVX-512 ni les instructions ultérieures.
Visual Studio prend en charge les commutateurs /arch:AVX et /arch:AVX2, qui permettent d’utiliser le préfixe VEX faisant partie de la norme du jeu d’instructions AVX. Utilisez ce commutateur pour toutes les applications XBOX. Pour plus de renseignements, consultez les articles suivants.

Intrinsèques clang/LLVM

L’ensemble d’outils clang/LLVM pour Windows implémente bon nombre des mêmes intrinsèques que MSVC, mais il existe quelques différences importantes :
  • clang/LLVM et GNUC traitent les types SIMD SSE différemment de Visual C++ et du compilateur Intel. Plus précisément, les types __m128, __m128i et __m128d sont des types opaques plutôt que des structures; vous ne pouvez donc pas créer de fonctions C++ surchargées utilisant ces types. Cette différence signifie aussi que l’accès direct aux éléments par __m128.m128_f32[0] ne se compile pas avec clang/LLVM.
C’est pourquoi DirectXMath définit _XM_NO_XMVECTOR_OVERLOADS_ lors des builds avec clang/LLVM. Pour une meilleure portabilité, vous pouvez définir explicitement cette macro dans votre code afin de l’appliquer aussi avec MSVC.
  • Les intrinsèques cpuid de clang/LLVM utilisent un en-tête spécial, #include <cpuid.h>. L’intrinsèque __cpuid prend une liste de paramètres différente, et __cpuid_count est l’équivalent de __cpuidex de MSVC, là encore avec une liste de paramètres différente.

Conventions d’appel

La convention d’appel par défaut pour le code natif x64 est __fastcall, décrite sur Microsoft Docs. Les conventions d’appel __cdecl et __stdcall ne sont que des alias de __fastcall sur x64. Les compilateurs MSVC et clang/LLVM prennent en charge la convention d’appel __vectorcall pour le code x86 et x64. Pour plus de renseignements, consultez Visual C++ Team Blog: Introducing ‘Vector Calling Convention’ et Microsoft Docs.

Autovectoriseur et autoparalléliseur

L’optimiseur Visual C++ peut transformer des calculs scalaires sur des entiers ou en virgule flottante en instructions SIMD grâce à l’autovectoriseur. L’autovectoriseur est automatiquement activé avec /O2 ou /Ox. Vous pouvez le désactiver pour des boucles spécifiques à l’aide de #pragma loop(no_vector). Ces ensembles d’outils de compilation prennent aussi en charge l’autoparallélisation des boucles à l’aide de threads. Activez l’autoparallélisation à l’aide de /Qpar. Vous pouvez fournir une indication pour une boucle spécifique à l’aide de #pragma (loop(hint_parallel(n))). Pour plus de renseignements, consultez l’article suivant.

Signaler des bogues

Signalez les bogues du compilateur Visual C++ (si possible) par la commande Report a Problem… de Visual Studio. Consultez Microsoft Docs et le site Web Developer Community. Pour savoir comment rédiger un bon rapport de bogue pour le compilateur, consultez cette page.
Si des informations soumises à NDA supplémentaires sont nécessaires pour reproduire le problème, vous pouvez ajouter un commentaire marqué « Microsoft only » à un rapport public.
Pour signaler des bogues du compilateur clang/LLVM pour Windows, utilisez https://bugs.llvm.org/ Pour signaler des bogues de la bibliothèque C++ standard de Microsoft (aussi appelée STL), utilisez https://github.com/microsoft/STL/issues Comme toujours, n’hésitez pas à communiquer avec votre Account Manager pour les problèmes critiques nécessitant une remontée.

Ressources

Dernière modification le 8 octobre 2026