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

# Tecnología de compiladores de Xbox

> Tecnología de compiladores para XBOX

El compilador para XBOX es el compilador x64 de Visual C++ que se incluye con Visual Studio. Use Visual Studio 2022 (17.12 o 17.14) o la actualización más reciente de Visual Studio 2026.

El desarrollo para XBOX también admite clang/LLVM para Windows v11 o posterior. Este conjunto de herramientas usa el entorno de ejecución de Visual C/C++. Si usa MSBuild, use la integración de clang/LLVM de Visual Studio 2019 o Visual Studio 2022.

Es posible que otras combinaciones de conjuntos de herramientas y entornos de ejecución no funcionen o no superen la certificación.

Para obtener más información sobre cómo actualizar el código de Visual C++, consulte [Guía de portabilidad y actualización de Visual C++](https://learn.microsoft.com/cpp/porting/visual-cpp-porting-and-upgrading-guide).

> [!NOTE]
>
> Las herramientas de XBOX solo funcionan con archivos de base de datos de programa de Microsoft (PDB) para los símbolos de depuración. No admiten la información de depuración CodeView ni DWARF que emiten los archivos `.ld` de LLVM.

## Versiones y características de los lenguajes C++14, C++17 y C++20

Visual Studio 2019, Visual Studio 2022 y Visual Studio 2026 admiten C++11, C++14 y C++17. Visual Studio 2022 y Visual Studio 2026 también admiten C++20.

| Versión del compilador | Macro de versión | Versión | Notas |
| - | - | - | - |
| 19.20 | \_MSC\_VER == 1920 | Visual Studio 2019 (versión 16.0) | [Características y correcciones de C++17/20 en Visual Studio 2019](https://devblogs.microsoft.com/cppblog/cpp17-20-features-and-fixes-in-vs-2019/) |
| 19.21 | \_MSC\_VER == 1921 | Visual Studio 2019 (versión 16.1) | |
| 19.22 | \_MSC\_VER == 1922 | Visual Studio 2019 (versión 16.2) | |
| 19.23 | \_MSC\_VER == 1923 | Visual Studio 2019 (versión 16.3) | |
| 19.24 | \_MSC\_VER == 1924 | Visual Studio 2019 (versión 16.4) | |
| 19.25 | \_MSC\_VER == 1925 | Visual Studio 2019 (versión 16.5) | [Módulos de C++20](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 (versión 16.6) | [Características y correcciones de C++20 en VS 2019 16.1 a 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 (versión 16.7) | [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-167) |
| 19.28 | \_MSC\_VER == 1928 | Visual Studio 2019 (versión 16.8) | [Módulos de C++20](https://devblogs.microsoft.com/cppblog/standard-c20-modules-support-with-msvc-in-visual-studio-2019-version-16-8/)  [Corrutinas de C++20](https://devblogs.microsoft.com/cppblog/c-coroutines-in-visual-studio-2019-version-16-8/)  [Características del lenguaje C++20](https://devblogs.microsoft.com/cppblog/c20-features-in-visual-studio-2019-versions-16-7-and-16-8/)  [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-168) |
| 19.28.29910 o posterior | | Visual Studio 2019 (versión 16.9) | [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-169) |
| 19.29 | \_MSC\_VER = 1929 | Visual Studio 2019 (versión 16.10) | [Rangos de C++20](https://devblogs.microsoft.com/cppblog/c20-ranges-are-complete-in-visual-studio-2019-version-16-10/)  [\<format>](https://devblogs.microsoft.com/cppblog/format-in-visual-studio-2019-version-16-10/)  [extensiones de \<chrono>](https://devblogs.microsoft.com/cppblog/cpp20s-extensions-to-chrono-available-in-visual-studio-2019-version-16-10/)  [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-1610) |
| 19.29.30133.0 o posterior | | Visual Studio 2019 (versión 16.11) | [Corrutinas de C++20](https://devblogs.microsoft.com/cppblog/cpp20-coroutine-improvements-in-visual-studio-2019-version-16-11/)  [Notas de cambios de STL](https://github.com/microsoft/STL/wiki/VS-2019-Changelog#vs-2019-161114)  [Modificador /std:c++20](https://devblogs.microsoft.com/cppblog/msvc-cpp20-and-the-std-cpp20-switch/) |
| 19.30 | \_MSC\_VER == 1930 | Visual Studio 2022 (17.0) | [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-170) |
| 19.31 | \_MSC\_VER == 1931 | Visual Studio 2022 (17.1) | [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-171) |
| 19.32 | \_MSC\_VER == 1932 | Visual Studio 2022 (17.2) | [La STL de MSVC completa /std:c++20](https://devblogs.microsoft.com/cppblog/msvcs-stl-completes-stdc20/)  [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-172) |
| 19.33 | \_MSC\_VER = 1933 | Visual Studio 2022 (17.3) | [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-173) |
| 19.34 | \_MSC\_VER = 1934 | Visual Studio 2022 (17.4) | [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-174) |
| 19.35 | \_MSC\_VER = 1935 | Visual Studio 2022 (17.5) | [Características y correcciones de STL](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/)  [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-176) |
| 19.37 | \_MSC\_VER = 1937 | Visual Studio 2022 (17.7) | [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-177) |
| 19.38 | \_MSC\_VER = 1938 | Visual Studio 2022 (17.8) | [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-178) |
| 19.39 | \_MSC\_VER = 1939 | Visual Studio 2022 (17.9) | [Actualizaciones del back-end de MSVC](https://devblogs.microsoft.com/cppblog/msvc-backend-updates-since-visual-studio-2022-version-17-3/)  [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/VS-2022-Changelog#vs-2022-179) |
| 19.40 | \_MSC\_VER = 1940 | Visual Studio 2022 (17.10) | [Versión secundaria del conjunto de herramientas de MSVC](https://devblogs.microsoft.com/cppblog/msvc-toolset-minor-version-number-14-40-in-vs-2022-v17-10/)  [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1710) |
| 19.41 | \_MSC\_VER = 1941 | Visual Studio 2022 (17.11) | [Cambios en los diagnósticos](https://devblogs.microsoft.com/cppblog/whats-new-for-cpp-developers-in-visual-studio-2022-17-11/)  [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1711) |
| 19.42 | \_MSC\_VER = 1942 | Visual Studio 2022 (17.12) | [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1712) |
| 19.43 | \_MSC\_VER = 1943 | Visual Studio 2022 (17.13) | [Actualizaciones del lenguaje C++](https://devblogs.microsoft.com/cppblog/msvc-compiler-updates-in-visual-studio-2022-version-17-13/)  [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1713) |
| 19.44 | \_MSC\_VER = 1944 | Visual Studio 2022 (17.14) | [Actualizaciones del lenguaje C++](https://devblogs.microsoft.com/cppblog/c-language-updates-in-msvc-in-visual-studio-2022-17-14/)  [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/Changelog#vs-2022-1714) |
| 19.50 | \_MSC\_VER = 1950 | Visual Studio 2026 | [Actualizaciones del lenguaje C++](https://devblogs.microsoft.com/cppblog/c-language-updates-in-msvc-build-tools-v14-50/)  [Características y correcciones de STL](https://github.com/microsoft/STL/wiki/Changelog#msvc-build-tools-1450) |

## Intrínsecos

El compilador de Visual C++ no admite el ensamblado insertado x64, pero sí una amplia variedad de intrínsecos que permiten incluir conjuntos de instrucciones especializados para el desarrollo para XBOX.

> [!NOTE]
>
> Cualquier uso de intrínsecos supone que ya ha comprobado que la plataforma de destino admite las instrucciones. Si no comprueba la compatibilidad, la aplicación lanza excepciones `invalid instruction` en tiempo de ejecución. Preste especial atención al hecho de que XBOX One (CPU AMD Jaguar) admite AVX y F16C, y XBOX Series X|S (CPU AMD Hercules) también admite AVX2 y FMA3. Ninguna de las dos plataformas admite AVX-512 ni instrucciones posteriores.

| Encabezado | Descripción |
| - | - |
| intrin.h | Intrínsecos generales, en particular `__cpuid` y varias formas intrínsecas de las rutinas de CRT. Incluye ammintrin.h e immintrin.h |
| ammintrin.h | Conjuntos de instrucciones de AMD: intrínsecos SSE5, FMA4 y XOP.   *FMA4 y XOP no son compatibles con XBOX One (CPU AMD Jaguar) ni con XBOX Series X\|S (CPU AMD Hercules)*. |
| immintrin.h | Conjuntos de instrucciones de Intel: intrínsecos [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) y [F16C/CVT16](https://en.wikipedia.org/wiki/F16C).   *AVX2, BMI2 y FMA3 son compatibles con XBOX Series X\|S (CPU AMD Hercules), pero no con XBOX One (CPU AMD Jaguar)*. |
| xmmintrin.h | [SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) Intrínsecos y el tipo `__m128` (SIMD de punto flotante de precisión sencilla). |
| emmintrin.h | [SSE2](https://en.wikipedia.org/wiki/SSE2) Intrínsecos y los tipos `__m128i` / `__m128d` (SIMD de enteros y de punto flotante de precisión doble). |
| pmmintrin.h | [SSE3](https://en.wikipedia.org/wiki/SSE3) Intrínsecos (operaciones horizontales de suma y resta de float/double, operaciones "dup" específicas). |
| tmmintrin.h | [SSSE3](https://en.wikipedia.org/wiki/SSSE3) Intrínsecos (más operaciones horizontales, abs de enteros, reorganización de "bytes" para complementar SSE2). |
| smmintrin.h | [SSE4.1](https://en.wikipedia.org/wiki/SSE4) Intrínsecos (producto escalar, redondeo, compatibilidad ampliada de min/max para SSE2). |
| nmmintrin.h | Intrínsecos SSE4.2. |
| wmmintrin.h | Intrínsecos AES. |
| zmmintrin.h | Intrínsecos AVX-512.   *Los intrínsecos AVX-512 no son compatibles con XBOX One (CPU AMD Jaguar) ni con XBOX Series X\|S (CPU AMD Hercules)*. |
| mmintrin.h | Intrínsecos MMX de Intel (incluido el tipo `__m64`), que no son compatibles con las aplicaciones nativas x64. |
| mm3dnow\.h | Intrínsecos 3DNow! de AMD, que no son compatibles con las aplicaciones nativas x64. *`_mm_prefetch` / `_m_prefetchw` son compatibles con el código nativo x64 y también se definen en intrin.h.* |

> [!NOTE]
>
> Visual Studio admite los modificadores **/arch:AVX** y **/arch:AVX2**, que habilitan el uso del [prefijo VEX](https://en.wikipedia.org/wiki/VEX_prefix) que forma parte del estándar del conjunto de instrucciones AVX. Use este modificador para todas las aplicaciones de XBOX. Para obtener más información, consulte los siguientes artículos.

* [Microsoft Docs: intrínsecos x64](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: serie DirectXMath](https://walbourn.github.io/directxmath-sse-sse2-and-arm-neon/)

### Intrínsecos de clang/LLVM

El conjunto de herramientas clang/LLVM para Windows implementa muchos de los mismos intrínsecos que MSVC, pero existen algunas diferencias clave:

* clang/LLVM y GNUC tratan los tipos SIMD de SSE de forma diferente a Visual C++ y al compilador de Intel. En concreto, los tipos `__m128`, `__m128i` y `__m128d` son tipos opacos en lugar de estructuras, por lo que no puede crear funciones sobrecargadas de C++ que usen esos tipos. Esta diferencia también implica que el acceso directo a elementos mediante `__m128.m128_f32[0]` no se compila en clang/LLVM.

> Por este motivo, DirectXMath define `_XM_NO_XMVECTOR_OVERLOADS_` al compilar con clang/LLVM. Para mejorar la portabilidad, puede definir explícitamente esta macro en el código para aplicarla también en MSVC.

* Los intrínsecos *cpuid* de clang/LLVM usan un encabezado especial `#include <cpuid.h>`. El intrínseco `__cpuid` acepta una lista de parámetros diferente, y `__cpuid_count` es el equivalente de `__cpuidex` de MSVC, pero también con una lista de parámetros diferente.

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

## Convenciones de llamada

La convención de llamada predeterminada para el código nativo x64 es `__fastcall`, que se detalla en [Microsoft Docs](https://learn.microsoft.com/cpp/build/x64-calling-convention). Las convenciones de llamada `__cdecl` y `__stdcall` son simplemente alias de `__fastcall` en x64.

Los compiladores MSVC y clang/LLVM incluyen compatibilidad con la convención de llamada `__vectorcall` para código x86 y x64. Para obtener más información, consulte
[Visual C++ Team Blog: Introducing 'Vector Calling Convention'](https://devblogs.microsoft.com/cppblog/introducing-vector-calling-convention/) y [Microsoft Docs](https://learn.microsoft.com/cpp/cpp/vectorcall).

## Vectorizador automático y paralelizador automático

El optimizador de Visual C++ puede convertir cálculos escalares de enteros o de punto flotante en instrucciones SIMD mediante el vectorizador automático. El vectorizador automático se habilita automáticamente con `/O2` o `/Ox`. Puede deshabilitarlo para bucles específicos mediante `#pragma loop(no_vector)`.

Estos conjuntos de herramientas del compilador también admiten la paralelización automática de bucles mediante subprocesos. Habilite la paralelización automática con `/Qpar`. Puede proporcionar una sugerencia para un bucle específico mediante `#pragma (loop(hint_parallel(n)))`. Para obtener más información, consulte el siguiente artículo.

* [Paralelización automática y vectorización automática](https://learn.microsoft.com/cpp/parallel/auto-parallelization-and-auto-vectorization)

## Notificación de errores

Notifique los errores del **compilador de Visual C++** (si es posible) mediante *Notificar un problema...* de Visual Studio. Consulte [Microsoft Docs](https://learn.microsoft.com/visualstudio/ide/how-to-report-a-problem-with-visual-studio) y el sitio web de [Developer Community](https://aka.ms/feedback/report?space=62). Para obtener más información sobre cómo crear un buen informe de errores para el compilador, consulte [esta página](https://aka.ms/compilerbug).

> [!NOTE]
>
> Si se requiere más información sujeta a NDA para reproducir el problema, puede agregar un comentario marcado como "Solo Microsoft" a un informe público del problema.

Para notificar errores del **compilador clang/LLVM para Windows**, use [https://bugs.llvm.org/](https://bugs.llvm.org/)

Para notificar errores de la **biblioteca estándar de C++ de Microsoft** (también conocida como STL), use [https://github.com/microsoft/STL/issues](https://github.com/microsoft/STL/issues)

Como siempre, no dude en ponerse en contacto con su *administrador de cuentas* para los problemas críticos que requieran escalado.

## Recursos

* [Guías y manuales para desarrolladores de AMD](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)

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


## Related topics

- [Directriz de accesibilidad de Xbox 105](/es/build/game-principles/accessibility/xag-deep-dives/xag-105-audio-accessibility.md)
- [Directriz de accesibilidad de Xbox 114](/es/build/game-principles/accessibility/xag-deep-dives/xag-114-ui-context.md)
- [Compatibilidad de Address Sanitizer para XBOX](/es/tools/tools-console/visualstudio/address-sanitizer-support.md)
- [Directriz de accesibilidad de Xbox 122](/es/build/game-principles/accessibility/xag-deep-dives/xag-122-accessible-customer-support.md)
- [Procedimientos recomendados de XBOX Manager para pruebas multijugador](/es/tools/tools-console/xbom/manager-tool-multiplayer.md)
