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 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,但同樣採用不同的參數清單。
呼叫慣例
x64 原生程式碼的預設呼叫慣例為__fastcall,詳細資訊請參閱 Microsoft Docs。在 x64 上,__cdecl 與 __stdcall 呼叫慣例只是 __fastcall 的別名。
MSVC 與 clang/LLVM 編譯器支援 x86 與 x64 程式碼的 __vectorcall 呼叫慣例。如需詳細資訊,請參閱
Visual C++ Team Blog: Introducing ‘Vector Calling Convention’ 與 Microsoft Docs。
自動向量化與自動平行化
Visual C++ 最佳化工具可以透過自動向量化,將純量整數或浮點計算變更為 SIMD 指令。自動向量化會隨/O2 或 /Ox 自動啟用。您可以使用 #pragma loop(no_vector) 為特定迴圈停用它。
這些編譯器工具組也支援使用執行緒對迴圈進行自動平行化。使用 /Qpar 啟用自動平行化。您可以使用 #pragma (loop(hint_parallel(n))) 為特定迴圈提供提示。如需詳細資訊,請參閱下列文章。
回報錯誤
Visual C++ 編譯器的錯誤請 (盡可能) 透過 Visual Studio 的 回報問題… 進行回報。請參閱 Microsoft Docs 與開發人員社群網站。如需為編譯器建立良好錯誤報告的詳細資訊,請參閱此頁面。如果需要更多 NDA 資訊才能重現問題,您可以在公開報告問題中新增標示為「僅限 Microsoft」的註解。
