Saltar al contenido principal
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++.
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.

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.
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.
Visual Studio admite los modificadores /arch:AVX y /arch:AVX2, que habilitan el uso del prefijo VEX 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.

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.

Convenciones de llamada

La convención de llamada predeterminada para el código nativo x64 es __fastcall, que se detalla en Microsoft Docs. 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’ y Microsoft Docs.

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.

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 y el sitio web de Developer Community. Para obtener más información sobre cómo crear un buen informe de errores para el compilador, consulte esta página.
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/ Para notificar errores de la biblioteca estándar de C++ de Microsoft (también conocida como STL), use 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

Última modificación el 20 de octubre de 2026