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

# XBOX 編譯器技術

> XBOX 編譯器技術

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++ Runtime。如果您使用 MSBuild，請使用 Visual Studio 2019 或 Visual Studio 2022 的 clang/LLVM 整合。

其他工具組與執行階段組合可能無法執行或通過認證。

如需升級 Visual C++ 程式碼的詳細資訊，請參閱 [Visual C++ 移植與升級指南](https://learn.microsoft.com/cpp/porting/visual-cpp-porting-and-upgrading-guide)。

<Note>
  XBOX 工具只能搭配 Microsoft 程式資料庫 (PDB) 檔案作為偵錯符號使用。它不支援 LLVM `.ld` 檔案所發出的 CodeView 或 DWARF 偵錯資訊。
</Note>

<a id="ID4EP" />

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

| 編譯器版本 | 版本巨集 | 版本 | 附註 |
| - | - | - | - |
| 19.20 | \_MSC\_VER == 1920 | Visual Studio 2019 (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 (16.1 版) | |
| 19.22 | \_MSC\_VER == 1922 | Visual Studio 2019 (16.2 版) | |
| 19.23 | \_MSC\_VER == 1923 | Visual Studio 2019 (16.3 版) | |
| 19.24 | \_MSC\_VER == 1924 | Visual Studio 2019 (16.4 版) | |
| 19.25 | \_MSC\_VER == 1925 | Visual Studio 2019 (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 (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 (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 (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 或更新版本 | | Visual Studio 2019 (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 (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 或更新版本 | | Visual Studio 2019 (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" />

## 內建函式

Visual C++ 編譯器不支援 x64 內嵌組譯，但支援各式各樣的內建函式，以支援在 XBOX 開發中納入特殊指令集。

<Note>
  任何內建函式的使用，都假設您已確認目標平台支援這些指令。如果您未確認支援，應用程式會在執行階段擲回 `invalid instruction` 例外狀況。請特別注意，XBOX One (AMD Jaguar CPU) 支援 AVX 與 F16C，而 XBOX Series X|S (AMD Hercules CPU) 還支援 AVX2 與 FMA3。兩個平台都不支援 AVX-512 或更新的指令。
</Note>

| 標頭 | 描述 |
| - | - |
| intrin.h | 一般內建函式，特別是 `__cpuid`，以及各種內建函式形式的 CRT 常式。包含 ammintrin.h 與 immintrin.h |
| ammintrin.h | AMD 指令集：SSE5、FMA4 與 XOP 內建函式。<br /> <br /> *XBOX One (AMD Jaguar CPU) 與 XBOX Series X\|S (AMD Hercules CPU) 都不支援 FMA4 與 XOP*。 |
| immintrin.h | Intel 指令集：[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) 與 [F16C/CVT16](https://en.wikipedia.org/wiki/F16C) 內建函式。<br /> <br /> *XBOX Series X\|S (AMD Hercules CPU) 支援 AVX2、BMI2 與 FMA3，但 XBOX One (AMD Jaguar CPU) 不支援*。 |
| xmmintrin.h | [SSE](https://en.wikipedia.org/wiki/Streaming_SIMD_Extensions) 內建函式與 `__m128` 類型 (單精度浮點 SIMD)。 |
| emmintrin.h | [SSE2](https://en.wikipedia.org/wiki/SSE2) 內建函式與 `__m128i` / `__m128d` 類型 (雙精度浮點與整數 SIMD)。 |
| pmmintrin.h | [SSE3](https://en.wikipedia.org/wiki/SSE3) 內建函式 (水平加減 float/double 運算、特定的 "dup" 運算)。 |
| tmmintrin.h | [SSSE3](https://en.wikipedia.org/wiki/SSSE3) 內建函式 (更多水平運算、整數 abs、用於擴充 SSE2 的「位元組」重組)。 |
| smmintrin.h | [SSE4.1](https://en.wikipedia.org/wiki/SSE4) 內建函式 (內積、捨入、擴充 SSE2 的 min/max 支援)。 |
| nmmintrin.h | SSE4.2 內建函式。 |
| wmmintrin.h | AES 內建函式。 |
| zmmintrin.h | AVX-512 內建函式。<br /> <br /> *XBOX One (AMD Jaguar CPU) 與 XBOX Series X\|S (AMD Hercules CPU) 都不支援 AVX-512 內建函式*。 |
| mmintrin.h | Intel MMX 內建函式 (包括 `__m64` 類型)，x64 原生應用程式不支援。 |
| mm3dnow\.h | AMD 3DNow! 內建函式，x64 原生應用程式不支援。*`_mm_prefetch` / `_m_prefetchw` 在 x64 原生中受支援，且也定義於 intrin.h 中。* |

<Note>
  Visual Studio 支援 **/arch:AVX** 與 **/arch:AVX2** 參數，可啟用屬於 AVX 指令集標準一部分的 [VEX 前置詞](https://en.wikipedia.org/wiki/VEX_prefix)。請對所有 XBOX 應用程式使用此參數。如需詳細資訊，請參閱下列文章。
</Note>

* [Microsoft Docs：x64 內建函式](https://learn.microsoft.com/cpp/intrinsics/x64-amd64-intrinsics-list)

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

* [Games for Windows and the DirectX SDK 部落格：DirectXMath 系列](https://walbourn.github.io/directxmath-sse-sse2-and-arm-neon/)

### clang/LLVM 內建函式

clang/LLVM for Windows 工具組實作了許多與 MSVC 相同的內建函式，但存在一些關鍵差異：

* clang/LLVM 與 GNUC 處理 SSE SIMD 類型的方式與 Visual C++ 和 Intel Compiler 不同。具體來說，`__m128`、`__m128i` 與 `__m128d` 類型是不透明類型而非結構，因此您無法建立使用這些類型的 C++ 多載函式。此差異也表示透過 `__m128.m128_f32[0]` 直接存取元素的程式碼無法在 clang/LLVM 上編譯。

> 因此，DirectXMath 在使用 clang/LLVM 建置時會定義 `_XM_NO_XMVECTOR_OVERLOADS_`。為了獲得更好的可攜性，您可以在程式碼中明確定義此巨集，以便對 MSVC 也強制執行。

* clang/LLVM 的 *cpuid* 內建函式使用特殊標頭 `#include <cpuid.h>`。`__cpuid` 內建函式採用不同的參數清單，而 `__cpuid_count` 相當於 MSVC 的 `__cpuidex`，但同樣採用不同的參數清單。

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

## 呼叫慣例

x64 原生程式碼的預設呼叫慣例為 `__fastcall`，詳細資訊請參閱 [Microsoft Docs](https://learn.microsoft.com/cpp/build/x64-calling-convention)。在 x64 上，`__cdecl` 與 `__stdcall` 呼叫慣例只是 `__fastcall` 的別名。

MSVC 與 clang/LLVM 編譯器支援 x86 與 x64 程式碼的 `__vectorcall` 呼叫慣例。如需詳細資訊，請參閱
[Visual C++ Team Blog: Introducing 'Vector Calling Convention'](https://devblogs.microsoft.com/cppblog/introducing-vector-calling-convention/) 與 [Microsoft Docs](https://learn.microsoft.com/cpp/cpp/vectorcall)。

<a id="ID4ESCAE" />

## 自動向量化與自動平行化

Visual C++ 最佳化工具可以透過自動向量化，將純量整數或浮點計算變更為 SIMD 指令。自動向量化會隨 `/O2` 或 `/Ox` 自動啟用。您可以使用 `#pragma loop(no_vector)` 為特定迴圈停用它。

這些編譯器工具組也支援使用執行緒對迴圈進行自動平行化。使用 `/Qpar` 啟用自動平行化。您可以使用 `#pragma (loop(hint_parallel(n)))` 為特定迴圈提供提示。如需詳細資訊，請參閱下列文章。

* [自動平行化與自動向量化](https://learn.microsoft.com/cpp/parallel/auto-parallelization-and-auto-vectorization)

<a id="ID4EIEAE" />

## 回報錯誤

**Visual C++ 編譯器**的錯誤請 (盡可能) 透過 Visual Studio 的 *回報問題...* 進行回報。請參閱 [Microsoft Docs](https://learn.microsoft.com/visualstudio/ide/how-to-report-a-problem-with-visual-studio) 與[開發人員社群](https://aka.ms/feedback/report?space=62)網站。如需為編譯器建立良好錯誤報告的詳細資訊，請參閱[此頁面](https://aka.ms/compilerbug)。

<Note>
  如果需要更多 NDA 資訊才能重現問題，您可以在公開報告問題中新增標示為「僅限 Microsoft」的註解。
</Note>

若要回報 **clang/LLVM for Windows 編譯器**的錯誤，請使用 [https://bugs.llvm.org/](https://bugs.llvm.org/)

若要回報 **Microsoft 標準 C++ 程式庫** (又稱 STL) 的錯誤，請使用 [https://github.com/microsoft/STL/issues](https://github.com/microsoft/STL/issues)

一如往常，對於需要提報的重大問題，歡迎與您的*客戶經理*聯絡。

## 資源

* [AMD 開發人員指南與手冊](https://developer.amd.com/resources/developer-guides-manuals/)

* [Intel 64 與 IA-32 架構軟體開發人員手冊](https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html)

* [Visual Studio 中 Visual C++ 的新功能](https://learn.microsoft.com/cpp/what-s-new-for-visual-cpp-in-visual-studio)


## Related topics

- [用於主機開發的 Visual Studio](/zh-TW/tools/tools-console/visualstudio/visualstudio.md)
- [Visual Studio](/zh-TW/tools/tools-console/visualstudio/index.md)
- [適用於 XBOX GDK 的 HLSL 著色器編譯器 (DXC)](/zh-TW/tools/tools-console/shadercompiler/index.md)
- [Visual C++ 編譯器與連結器參數建議](/zh-TW/tools/tools-console/visualstudio/compiler-switch-recommendations.md)
- [Visual C++ 編譯器資源](/zh-TW/tools/tools-console/visualstudio/compiler-resources.md)
