> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Technologie de compilation XBOX

> Technologie de compilation XBOX

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](https://learn.microsoft.com/cpp/porting/visual-cpp-porting-and-upgrading-guide).

<Note>
  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.
</Note>

<a id="ID4EP" />

## 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.

| Version du compilateur | Macro de version | Version | Remarques |
| - | - | - | - |
| 19.20 | \_MSC\_VER == 1920 | Visual Studio 2019 (version 16.0) | [C++17/20 Features and Fixes in Visual Studio 2019](https://devblogs.microsoft.com/cppblog/cpp17-20-features-and-fixes-in-vs-2019/) |
| 19.21 | \_MSC\_VER == 1921 | Visual Studio 2019 (version 16.1) | |
| 19.22 | \_MSC\_VER == 1922 | Visual Studio 2019 (version 16.2) | |
| 19.23 | \_MSC\_VER == 1923 | Visual Studio 2019 (version 16.3) | |
| 19.24 | \_MSC\_VER == 1924 | Visual Studio 2019 (version 16.4) | |
| 19.25 | \_MSC\_VER == 1925 | Visual Studio 2019 (version 16.5) | [C++20 Modules](https://devblogs.microsoft.com/cppblog/c-modules-conformance-improvements-with-msvc-in-visual-studio-2019-16-5/) |
| 19.26 | \_MSC\_VER == 1926 | Visual Studio 2019 (version 16.6) | [C++20 Features and Fixes in VS 2019 16.1 through 16.6](https://devblogs.microsoft.com/cppblog/c20-features-and-fixes-in-vs-2019-16-1-through-16-6/) |
| 19.27 | \_MSC\_VER == 1927 | Visual Studio 2019 (version 16.7) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-167) |
| 19.28 | \_MSC\_VER == 1928 | Visual Studio 2019 (version 16.8) | [C++20 Modules](https://devblogs.microsoft.com/cppblog/standard-c20-modules-support-with-msvc-in-visual-studio-2019-version-16-8/) <br /> [C++20 Coroutines](https://devblogs.microsoft.com/cppblog/c-coroutines-in-visual-studio-2019-version-16-8/) <br /> [C++20 Language Features](https://devblogs.microsoft.com/cppblog/c20-features-in-visual-studio-2019-versions-16-7-and-16-8/) <br /> [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-168) |
| 19.28.29910 ou version ultérieure | | Visual Studio 2019 (version 16.9) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-169) |
| 19.29 | \_MSC\_VER = 1929 | Visual Studio 2019 (version 16.10) | [C++20 Ranges](https://devblogs.microsoft.com/cppblog/c20-ranges-are-complete-in-visual-studio-2019-version-16-10/) <br /> [\<format>](https://devblogs.microsoft.com/cppblog/format-in-visual-studio-2019-version-16-10/) <br /> [extensions to \<chrono>](https://devblogs.microsoft.com/cppblog/cpp20s-extensions-to-chrono-available-in-visual-studio-2019-version-16-10/) <br /> [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-1610) |
| 19.29.30133.0 ou version ultérieure | | Visual Studio 2019 (version 16.11) | [C++20 Coroutines](https://devblogs.microsoft.com/cppblog/cpp20-coroutine-improvements-in-visual-studio-2019-version-16-11/) <br /> [STL Change Notes](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-161114) <br /> [/std:c++20 switch](https://devblogs.microsoft.com/cppblog/msvc-cpp20-and-the-std-cpp20-switch/) |
| 19.30 | \_MSC\_VER == 1930 | Visual Studio 2022 (17.0) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-170) |
| 19.31 | \_MSC\_VER == 1931 | Visual Studio 2022 (17.1) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-171) |
| 19.32 | \_MSC\_VER == 1932 | Visual Studio 2022 (17.2) | [MSVC's STL Completes /std:c++20](https://devblogs.microsoft.com/cppblog/msvcs-stl-completes-stdc20/) <br /> [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-172) |
| 19.33 | \_MSC\_VER = 1933 | Visual Studio 2022 (17.3) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-173) |
| 19.34 | \_MSC\_VER = 1934 | Visual Studio 2022 (17.4) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-174) |
| 19.35 | \_MSC\_VER = 1935 | Visual Studio 2022 (17.5) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-175) |
| 19.36 | \_MSC\_VER = 1936 | Visual Studio 2022 (17.6) | [vcpkg](https://devblogs.microsoft.com/cppblog/visual-studio-17-6-for-cpp-devs/) <br /> [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-176) |
| 19.37 | \_MSC\_VER = 1937 | Visual Studio 2022 (17.7) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-177) |
| 19.38 | \_MSC\_VER = 1938 | Visual Studio 2022 (17.8) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-178) |
| 19.39 | \_MSC\_VER = 1939 | Visual Studio 2022 (17.9) | [MSVC Backend Updates](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/) <br /> [STL Features and Fixes](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-179) |
| 19.40 | \_MSC\_VER = 1940 | Visual Studio 2022 (17.10) | [MSVC Toolset Minor Version](https://devblogs.microsoft.com/cppblog/msvc-toolset-minor-version-number-14-40-in-vs-2022-v17-10/) <br /> [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) |
| 19.41 | \_MSC\_VER = 1941 | Visual Studio 2022 (17.11) | [Diagnostics changes](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-11/) <br /> [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1711) |
| 19.42 | \_MSC\_VER = 1942 | Visual Studio 2022 (17.12) | [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1712) |
| 19.43 | \_MSC\_VER = 1943 | Visual Studio 2022 (17.13) | [C++ Language Updates](https://devblogs.microsoft.com/cppblog/msvc-compiler-updates-in-visual-studio-2022-version-17-13/) <br /> [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1713) |
| 19.44 | \_MSC\_VER = 1944 | Visual Studio 2022 (17.14) | [C++ Language Updates](https://devblogs.microsoft.com/cppblog/c-language-updates-in-msvc-in-visual-studio-2022-17-14/) <br /> [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1714) |
| 19.50 | \_MSC\_VER = 1950 | Visual Studio 2026 | [C++ Language Updates](https://devblogs.microsoft.com/cppblog/c-language-updates-in-msvc-build-tools-v14-50/) <br /> [STL Features and Fixes](https://github.com/microsoft/STL/wiki/Changelog#msvc-build-tools-1450) |

<a id="ID4ECOAC" />

## 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.

<Note>
  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.
</Note>

| En-tête | Description |
| - | - |
| intrin.h | Intrinsèques généraux, notamment `__cpuid` et diverses formes intrinsèques des routines du CRT. Inclut ammintrin.h et immintrin.h |
| ammintrin.h | Jeux d'instructions AMD : intrinsèques SSE5, FMA4 et XOP. <br /> <br /> *FMA4 et XOP ne sont pas pris en charge par la XBOX One (processeur AMD Jaguar) ni par les XBOX Series X\|S (processeur AMD Hercules)*. |
| immintrin.h | Jeux d'instructions Intel : intrinsèques [AVX](https://en.wikipedia.org/wiki/Advanced_Vector_Extensions), AVX2, [BMI, BMI2](https://en.wikipedia.org/wiki/Bit_manipulation_instruction_set), [FMA3](https://en.wikipedia.org/wiki/FMA_instruction_set) et [F16C/CVT16](https://en.wikipedia.org/wiki/F16C). <br /> <br /> *AVX2, BMI2 et FMA3 sont pris en charge par les XBOX Series X\|S (processeur AMD Hercules), mais pas par la XBOX One (processeur AMD Jaguar)*. |
| xmmintrin.h | Intrinsèques [SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) et type `__m128` (SIMD à virgule flottante simple précision). |
| emmintrin.h | Intrinsèques [SSE2](https://en.wikipedia.org/wiki/SSE2) et types `__m128i` / `__m128d` (SIMD à virgule flottante double précision et entier). |
| pmmintrin.h | Intrinsèques [SSE3](https://en.wikipedia.org/wiki/SSE3) (opérations horizontales d'addition et de soustraction float/double, opérations « dup » spécifiques). |
| tmmintrin.h | Intrinsèques [SSSE3](https://en.wikipedia.org/wiki/SSSE3) (davantage d'opérations horizontales, valeur absolue d'entiers, brassage d'« octets » complétant SSE2). |
| smmintrin.h | Intrinsèques [SSE4.1](https://en.wikipedia.org/wiki/SSE4) (produit scalaire, arrondi, prise en charge étendue de min/max pour SSE2). |
| nmmintrin.h | Intrinsèques SSE4.2. |
| wmmintrin.h | Intrinsèques AES. |
| zmmintrin.h | Intrinsèques AVX-512. <br /> <br /> *Les intrinsèques AVX-512 ne sont pas pris en charge par la XBOX One (processeur AMD Jaguar) ni par les XBOX Series X\|S (processeur AMD Hercules)*. |
| mmintrin.h | Intrinsèques Intel MMX (y compris le type `__m64`), qui ne sont pas pris en charge pour les applications natives x64. |
| mm3dnow\.h | Intrinsèques AMD 3DNow!, qui ne sont pas pris en charge pour les applications natives x64. *`_mm_prefetch` / `_m_prefetchw` sont pris en charge en natif x64 et sont aussi définis dans intrin.h.* |

<Note>
  Visual Studio prend en charge les commutateurs **/arch:AVX** et **/arch:AVX2**, qui permettent d'utiliser le [préfixe VEX](https://en.wikipedia.org/wiki/VEX_prefix) 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.
</Note>

* [Microsoft Docs: x64 Intrinsics](https://learn.microsoft.com/cpp/intrinsics/x64-amd64-intrinsics-list)

* [Intel: AVX](https://go.microsoft.com/fwlink/p/?LinkId=251202)

* [Blog Games for Windows and the DirectX SDK : série DirectXMath](https://walbourn.github.io/directxmath-sse-sse2-and-arm-neon/)

### 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.

```
#if (defined(__clang__) || defined(__GNUC__)) && (__x86_64__ || __i386__)
#include <cpuid.h>
#else
#include <intrin.h>
#endif
```

```
int CPUInfo[4] = { -1 };
#if defined(__clang__) || defined(__GNUC__)
__cpuid(0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);
#else
__cpuid(CPUInfo, 0);
#endif
```

```
#if defined(__clang__) || defined(__GNUC__)
__cpuid_count(7, 0, CPUInfo[0], CPUInfo[1], CPUInfo[2], CPUInfo[3]);
#else
__cpuidex(CPUInfo, 7, 0);
#endif
```

<a id="ID4EGCAE" />

## Conventions d'appel

La convention d'appel par défaut pour le code natif x64 est `__fastcall`, décrite sur [Microsoft Docs](https://learn.microsoft.com/cpp/build/x64-calling-convention). 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'](https://devblogs.microsoft.com/cppblog/introducing-vector-calling-convention/) et [Microsoft Docs](https://learn.microsoft.com/cpp/cpp/vectorcall).

<a id="ID4ESCAE" />

## 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.

* [Auto-Parallelization and Auto-Vectorization](https://learn.microsoft.com/cpp/parallel/auto-parallelization-and-auto-vectorization)

<a id="ID4EIEAE" />

## Signaler des bogues

Signalez les bogues du **compilateur Visual C++** (si possible) par la commande *Report a Problem...* de Visual Studio. Consultez [Microsoft Docs](https://learn.microsoft.com/visualstudio/ide/how-to-report-a-problem-with-visual-studio) et le site Web [Developer Community](https://aka.ms/feedback/report?space=62). Pour savoir comment rédiger un bon rapport de bogue pour le compilateur, consultez [cette page](https://aka.ms/compilerbug).

<Note>
  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.
</Note>

Pour signaler des bogues du **compilateur clang/LLVM pour Windows**, utilisez [https://bugs.llvm.org/](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](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

* [AMD Developer Guides & Manuals](https://developer.amd.com/resources/developer-guides-manuals/)

* [Intel 64 and IA-32 Architectures Software Developer Manuals](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html)

* [What's New for Visual C++ in Visual Studio](https://learn.microsoft.com/cpp/what-s-new-for-visual-cpp-in-visual-studio)


## Related topics

- [Visual Studio pour le développement sur console](/fr-CA/tools/tools-console/visualstudio/visualstudio.md)
- [Prise en charge d'Address Sanitizer pour XBOX](/fr-CA/tools/tools-console/visualstudio/address-sanitizer-support.md)
- [Advanced Shader Delivery](/fr-CA/build/gdk-and-engines/guides/advanced-shader-delivery.md)
- [Soumettre des packages de jeu à la certification finale](/fr-CA/publishing/game-publishing/publishing-processes/managed-creators/publishing-processes-disc-and-digital-certification.md)
- [Utilisation de l'API C++ de Game Chat 2](/fr-CA/services/xbox-services/multiplayer/chat/game-chat2/using-game-chat-2.md)
