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.
- Microsoft Docs: intrínsecos x64
- Intel: AVX
- Blog Games for Windows and the DirectX SDK: serie DirectXMath
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,__m128iy__m128dson 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__cpuidacepta una lista de parámetros diferente, y__cpuid_countes el equivalente de__cpuidexde 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.
