메인 콘텐츠로 건너뛰기
XBOX용 컴파일러는 Visual Studio와 함께 제공되는 Visual C++ x64 컴파일러입니다. Visual Studio 2022(17.12 또는 17.14) 또는 최신 Visual Studio 2026 업데이트를 사용하세요. XBOX 개발은 Windows용 clang/LLVM 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 내장 함수

Windows용 clang/LLVM 도구 집합은 MSVC와 동일한 내장 함수를 다수 구현하지만, 몇 가지 주요 차이점이 있습니다.
  • clang/LLVM 및 GNUC는 SSE SIMD 형식을 Visual C++ 및 Intel 컴파일러와 다르게 처리합니다. 특히 __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에 설명되어 있습니다. __cdecl 및 __stdcall 호출 규칙은 x64에서 __fastcall의 별칭일 뿐입니다. MSVC 및 clang/LLVM 컴파일러는 x86 및 x64 코드에 대해 __vectorcall 호출 규칙을 지원합니다. 자세한 내용은 Visual C++ 팀 블로그: ‘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 전용”으로 표시된 댓글을 추가할 수 있습니다.
Windows용 clang/LLVM 컴파일러의 버그 보고는 https://bugs.llvm.org/ 를 사용하세요. Microsoft 표준 C++ 라이브러리(STL이라고도 함)의 버그 보고는 https://github.com/microsoft/STL/issues 를 사용하세요. 언제나처럼 에스컬레이션이 필요한 중요한 문제는 계정 관리자에게 언제든지 문의하세요.

리소스

마지막 수정일 2026년 10월 20일