跳转到主要内容
XBOX 的编译器是随 Visual Studio 一起提供的 Visual C++ x64 编译器。请使用 Visual Studio 2022 (17.12 或 17.14) 或最新的 Visual Studio 2026 更新。 XBOX 开发还支持 clang/LLVM for Windows v11 或更高版本。此工具集使用 Visual C/C++ 运行时。如果使用 MSBuild,请使用 Visual Studio 2019 或 Visual Studio 2022 的 clang/LLVM 集成。 其他工具集和运行时组合可能无法运行或无法通过认证。 有关升级 Visual C++ 代码的详细信息,请参阅 Visual C++ 移植和升级指南。
XBOX 工具仅支持将 Microsoft 程序数据库 (PDB) 文件用于调试符号。它不支持 LLVM .ld 文件发出的 CodeView 或 DWARF 调试信息。

C++14、C++17 和 C++20 语言版本和功能

Visual Studio 2019、Visual Studio 2022 和 Visual Studio 2026 支持 C++11、C++14 和 C++17。Visual Studio 2022 和 Visual Studio 2026 还支持 C++20。

内部函数

Visual C++ 编译器不支持 x64 内联汇编,但支持多种内部函数,以便在 XBOX 开发中使用专用指令集。
使用任何内部函数的前提是你已验证目标平台支持相应指令。如果不验证支持情况,应用会在运行时引发 invalid instruction 异常。请特别注意,XBOX One (AMD Jaguar CPU) 支持 AVX 和 F16C,XBOX Series X|S (AMD Hercules CPU) 还支持 AVX2 和 FMA3。这两个平台都不支持 AVX-512 或更高版本的指令。
Visual Studio 支持 /arch:AVX 和 /arch:AVX2 开关,这两个开关可启用 AVX 指令集标准中的 VEX 前缀。请对所有 XBOX 应用程序使用此开关。有关详细信息,请参阅以下文章。

clang/LLVM 内部函数

clang/LLVM for Windows 工具集实现了许多与 MSVC 相同的内部函数,但存在一些关键差异:
  • clang/LLVM 和 GNUC 处理 SSE SIMD 类型的方式与 Visual C++ 和 Intel 编译器不同。具体而言,__m128、__m128i 和 __m128d 类型是不透明类型而不是结构,因此你无法创建使用这些类型的 C++ 重载函数。这一差异还意味着通过 __m128.m128_f32[0] 直接访问元素的代码无法在 clang/LLVM 上编译。
因此,使用 clang/LLVM 进行生成时,DirectXMath 会定义 _XM_NO_XMVECTOR_OVERLOADS_。为了获得更好的可移植性,你可以在代码中显式定义此宏,以便对 MSVC 也强制执行此行为。
  • clang/LLVM 的 cpuid 内部函数使用特殊标头 #include <cpuid.h>。__cpuid 内部函数采用不同的参数列表,而 __cpuid_count 等效于 MSVC 的 __cpuidex,但参数列表同样不同。

调用约定

x64 本机代码的默认调用约定是 __fastcall,详见 Microsoft Docs。在 x64 上,__cdecl 和 __stdcall 调用约定只是 __fastcall 的别名。 MSVC 和 clang/LLVM 编译器支持 x86 和 x64 代码的 __vectorcall 调用约定。有关详细信息,请参阅 Visual C++ 团队博客:Introducing ‘Vector Calling Convention’ 和 Microsoft Docs。

自动矢量化程序和自动并行化程序

Visual C++ 优化器可以通过自动矢量化程序将标量整数或浮点计算转换为 SIMD 指令。使用 /O2 或 /Ox 时会自动启用自动矢量化程序。你可以使用 #pragma loop(no_vector) 为特定循环禁用它。 这些编译器工具集还支持使用线程对循环进行自动并行化。使用 /Qpar 启用自动并行化。你可以使用 #pragma (loop(hint_parallel(n))) 为特定循环提供提示。有关详细信息,请参阅以下文章。

报告 bug

请 (尽可能) 通过 Visual Studio 的 报告问题… 报告 Visual C++ 编译器 的 bug。请参阅 Microsoft Docs 和开发者社区网站。有关为编译器创建优质 bug 报告的详细信息,请参阅此页面。
 如果需要更多 NDA 信息才能重现问题,你可以在公开报告的问题中添加标记为 “Microsoft only” 的评论。
若要报告 clang/LLVM for Windows 编译器 的 bug,请使用 https://bugs.llvm.org/ 若要报告 Microsoft 标准 C++ 库 (也称为 STL) 的 bug,请使用 https://github.com/microsoft/STL/issues 与往常一样,对于需要上报的关键问题,请随时联系你的客户经理。

资源

最后修改于 2026年10月20日