| 개발자 | 마이크로소프트 |
|---|---|
| 발표일 | 1993년 2월 |
| 안정화 버전 | 14.44 (Build 35211.0)
/ 2025년 6월 17일 |
| 프로그래밍 언어 | C++ |
| 운영 체제 | 윈도우 |
| 플랫폼 | IA-32, x86-64, ARM |
| 언어 | 영어, 중국어(간체 및 번체), 체코어, 프랑스어, 독일어, 이탈리아어, 일본어, 한국어, 폴란드어, 포르투갈어(브라질), 러시아어, 스페인어, 터키어 |
| 종류 | 컴파일러 |
| 라이선스 | 셰어웨어, 프리웨어 |
| 웹사이트 | visualstudio |
마이크로소프트 비주얼 C++(Microsoft Visual C++, MSVC)는 마이크로소프트의 C, C++, C++/CLI 및 C++/CX 프로그래밍 언어용 컴파일러이다. MSVC는 사유 소프트웨어이며, 원래 독립형 제품이었으나 나중에 비주얼 스튜디오의 일부가 되었고 셰어웨어 및 프리웨어 형태로 제공된다. 특히 윈도우 API, DirectX 및 .NET용으로 작성된 C++ 코드를 개발하고 디버그하는 도구를 제공한다.
많은 응용 소프트웨어는 올바르게 작동하기 위해 재배포 가능한 비주얼 C++ 런타임 라이브러리 패키지를 필요로 한다. 이러한 패키지는 지원하는 응용 프로그램과 별도로 자주 설치되어 여러 응용 프로그램이 단 한 번의 설치로 패키지를 사용할 수 있도록 한다. 이러한 비주얼 C++ 재배포 가능 및 런타임 패키지는 대부분의 응용 프로그램이 사용하는 표준 라이브러리용으로 설치된다.
비주얼 C++의 전신은 마이크로소프트 C/C++라고 불렸다. 마이크로소프트 QuickC 2.5와 윈도우 1.0용 마이크로소프트 QuickC도 있었다. 비주얼 C++ 컴파일러는 여전히 마이크로소프트 C/C++로 알려져 있으며, 비주얼 C++ 2015 업데이트 2 출시 시점에서 버전 14.0.23918.0이다.
비주얼 C 또는 C++를 사용할 때 고려해야 할 몇 가지 다른 버전 번호가 있다. 이 중 가장 오래되고 원본인 것은 컴파일러 버전 번호이며, 이는 초기 마이크로소프트 C 컴파일러 시절부터 단조롭게 증가해 왔다. 이는 어떤 옵션 없이 cl.exe 명령을 실행할 때 반환되는 버전이다. 소수점 이하 두 자리를 취하고 소수점을 제거하면 C 전처리기 매크로: _MSC_VER의 값과 CMake 변수: MSVC_VERSION의 값이 된다. C 매크로의 더 긴 버전은 _MSC_FULL_VER이며 컴파일러 빌드 간의 더 미세한 구분을 만든다. _MSC_VER의 예는 Microsoft C/C++ 컴파일러의 버전 19.33을 나타내는 1933이며, _MSC_FULL_VER의 예는 193331630이다.
"17.3.4"와 같은 Visual 제품 버전은 컴파일러 버전 19.33이 포함된 Visual Studio 버전을 지정한다. 그런 다음 마이크로소프트 비주얼 C/C++ 런타임 라이브러리 버전, 예를 들어 "14.3"이 있다. 이로부터 런타임 라이브러리 버전의 처음 세 자리를 취하고 소수점을 제거하여 얻을 수 있는 툴셋 버전, 예를 들어 "143"도 추론할 수 있다. 여기에는 비주얼 C/C++ 런타임 라이브러리뿐만 아니라 컴파일러, 링커, 어셈블러, 기타 빌드 도구, 그리고 일치하는 라이브러리 및 헤더 파일이 포함된다. 다음은 알려진 상관 관계가 있는 버전 번호의 (스크래핑 가능한) 표이다.
| product name | VC ( Version Code ) | marketing year | _MSC_VER | _MSC_FULL_VER | runtime library version |
|---|---|---|---|---|---|
| Microsoft C 6.0 | 600 | ||||
| Microsoft C/C++ 7.0 | 700 | ||||
| Visual C++ 1.0 | 1.0 | 800 | 1 | ||
| Visual C++ 2.0 | 2.0 | 900 | 2 | ||
| Visual C++ 4.0 | 4.0 | 1000 | 4 | ||
| Visual C++ 4.1 | 4.1 | 1010 | 4.1 | ||
| Visual C++ 4.2 | 4.2 | 1020 | 4.2 | ||
| Visual Studio 97 [5.0] | 5.0 | 97 | 1100 | 5 | |
| Visual Studio 6.0 SP5 | 6.0 | 1200 | 12008804 | 6 | |
| Visual Studio 6.0 SP6 | 6.0 | 1200 | 12008804 | 6 | |
| Visual Studio .NET 2002 [7.0] | 7.0 | 2002 | 1300 | 13009466 | 7 |
| Visual Studio .NET 2003 Beta [7.1] | 7.1 | 2003 | 1310 | 13102292 | 7.1 |
| Visual Studio Toolkit 2003 [7.1] | 7.1 | 2003 | 1310 | 13103052 | 7.1 |
| Visual Studio .NET 2003 [7.1] | 7.1 | 2003 | 1310 | 13103077 | 7.1 |
| Visual Studio .NET 2003 SP1 [7.1] | 7.1 | 2003 | 1310 | 13106030 | 7.1 |
| Visual Studio 2005 Beta 1 [8.0] | 8.0 | 2005 | 1400 | 140040607 | 8 |
| Visual Studio 2005 Beta 2 [8.0] | 8.0 | 2005 | 1400 | 140050215 | 8 |
| Visual Studio 2005 [8.0] | 8.0 | 2005 | 1400 | 140050320 | 8 |
| Visual Studio 2005 SP1 [8.0] | 8.0 | 2005 | 1400 | 140050727 | 8 |
| Visual Studio 2008 Beta 2 [9.0] | 8.0 | 2008 | 1500 | 150020706 | 9 |
| Visual Studio 2008 [9.0] | 9.0 | 2010 | 1500 | 150021022 | 9 |
| Visual Studio 2008 SP1 [9.0] | 9.0 | 2010 | 1500 | 150030729 | 9 |
| Visual Studio 2010 Beta 1 [10.0] | 10.0 | 2010 | 1600 | 160020506 | 10 |
| Visual Studio 2010 Beta 2 [10.0] | 10.0 | 2010 | 1600 | 160021003 | 10 |
| Visual Studio 2010 [10.0] | 10.0 | 2010 | 1600 | 160030319 | 10 |
| Visual Studio 2010 SP1 [10.0] | 10.0 | 2010 | 1600 | 160040219 | 10 |
| Visual Studio 2012 [11.0] | 11.0 | 2012 | 1700 | 170050727 | 11 |
| Visual Studio 2012 Update 1 [11.0] | 11.0 | 2012 | 1700 | 170051106 | 11 |
| Visual Studio 2012 Update 2 [11.0] | 11.0 | 2012 | 1700 | 170060315 | 11 |
| Visual Studio 2012 Update 3 [11.0] | 11.0 | 2012 | 1700 | 170060610 | 11 |
| Visual Studio 2012 Update 4 [11.0] | 11.0 | 2012 | 1700 | 170061030 | 11 |
| Visual Studio 2012 November CTP [11.0] | 11.0 | 2012 | 1700 | 170051025 | 11 |
| Visual Studio 2013 Preview [12.0] | 12.0 | 2013 | 1800 | 180020617 | 12 |
| Visual Studio 2013 RC [12.0] | 12.0 | 2013 | 1800 | 180020827 | 12 |
| Visual Studio 2013 [12.0] | 12.0 | 2013 | 1800 | 180021005 | 12 |
| Visual Studio 2013 Update 1 [12.0] | 12.0 | 2013 | 1800 | 180021005 | 12 |
| Visual Studio 2013 Update2 RC [12.0] | 12.0 | 2013 | 1800 | 180030324 | 12 |
| Visual Studio 2013 Update 2 [12.0] | 12.0 | 2013 | 1800 | 180030501 | 12 |
| Visual Studio 2013 Update 3 [12.0] | 12.0 | 2013 | 1800 | 180030723 | 12 |
| Visual Studio 2013 Update 4 [12.0] | 12.0 | 2013 | 1800 | 180031101 | 12 |
| Visual Studio 2013 Update 5 [12.0] | 12.0 | 2013 | 1800 | 180040629 | 12 |
| Visual Studio 2013 November CTP [12.0] | 12.0 | 2013 | 1800 | 180021114 | 12 |
| Visual Studio 2015 [14.0] | 14.0 | 2015 | 1900 | 190023026 | 14 |
| Visual Studio 2015 Update 1 [14.0] | 14.0 | 2015 | 1900 | 190023506 | 14 |
| Visual Studio 2015 Update 2 [14.0] | 14.0 | 2015 | 1900 | 190023918 | 14 |
| Visual Studio 2015 Update 3 [14.0] | 14.0 | 2015 | 1900 | 190024210 | 14 |
| Visual Studio 2017 version 15.0 | 15.0 | 2017 | 1910 | 191025017 | 14.1 |
| Visual Studio 2017 version 15.1 | 15.1 | 2017 | 1910 | 191025017 | 14.1 |
| Visual Studio 2017 version 15.2 | 15.2 | 2017 | 1910 | 191025017 | 14.1 |
| Visual Studio 2017 version 15.3.3 | 15.3.3 | 2017 | 1911 | 191125507 | 14.11 |
| Visual Studio 2017 version 15.4.4 | 15.4.4 | 2017 | 1911 | 191125542 | 14.11 |
| Visual Studio 2017 version 15.4.5 | 15.4.5 | 2017 | 1911 | 191125547 | 14.11 |
| Visual Studio 2017 version 15.5.2 | 15.5.2 | 2017 | 1912 | 191225831 | 14.12 |
| Visual Studio 2017 version 15.5.3 | 15.5.3 | 2017 | 1912 | 191225834 | 14.12 |
| Visual Studio 2017 version 15.5.4 | 15.5.4 | 2017 | 1912 | 191225834 | 14.12 |
| Visual Studio 2017 version 15.5.6 | 15.5.6 | 2017 | 1912 | 191225835 | 14.12 |
| Visual Studio 2017 version 15.5.7 | 15.5.7 | 2017 | 1912 | 191225835 | 14.12 |
| Visual Studio 2017 version 15.6.0 | 15.6.0 | 2017 | 1913 | 191326128 | 14.13 |
| Visual Studio 2017 version 15.6.1 | 15.6.1 | 2017 | 1913 | 191326128 | 14.13 |
| Visual Studio 2017 version 15.6.2 | 15.6.2 | 2017 | 1913 | 191326128 | 14.13 |
| Visual Studio 2017 version 15.6.3 | 15.6.3 | 2017 | 1913 | 191326129 | 14.13 |
| Visual Studio 2017 version 15.6.4 | 15.6.4 | 2017 | 1913 | 191326129 | 14.13 |
| Visual Studio 2017 version 15.6.6 | 15.6.6 | 2017 | 1913 | 191326131 | 14.13 |
| Visual Studio 2017 version 15.6.7 | 15.6.7 | 2017 | 1913 | 191326132 | 14.13 |
| Visual Studio 2017 version 15.7.1 | 15.7.1 | 2017 | 1914 | 191426428 | 14.14 |
| Visual Studio 2017 version 15.7.2 | 15.7.2 | 2017 | 1914 | 191426429 | 14.14 |
| Visual Studio 2017 version 15.7.3 | 15.7.3 | 2017 | 1914 | 191426430 | 14.14 |
| Visual Studio 2017 version 15.7.5 | 15.7.5 | 2017 | 1914 | 191426433 | 14.14 |
| Visual Studio 2017 version 15.9.1 | 15.9.1 | 2017 | 1916 | 191627023 | 14.16 |
| Visual Studio 2017 version 15.9.4 | 15.9.4 | 2017 | 1916 | 191627025 | 14.16 |
| Visual Studio 2017 version 15.9.5 | 15.9.5 | 2017 | 1916 | 191627026 | 14.16 |
| Visual Studio 2017 version 15.9.7 | 15.9.7 | 2017 | 1916 | 191627027 | 14.16 |
| Visual Studio 2017 version 15.9.11 | 15.9.11 | 2017 | 1916 | 191627030 | 14.16 |
| Visual Studio 2019 version 16.0.0 | 16.0.0 | 2019 | 1920 | 192027508 | 14.20 |
| Visual Studio 2019 version 16.1.2 | 16.1.2 | 2019 | 1921 | 192127702 | 14.21 |
| Visual Studio 2019 version 16.2.3 | 16.2.3 | 2019 | 1922 | 192227905 | 14.21 |
| Visual Studio 2019 version 16.3.2 | 16.3.2 | 2019 | 1923 | 192328105 | 14.21 |
| Visual Studio 2019 version 16.4.0 | 16.4.0 | 2019 | 1924 | 192428314 | 14.24 |
| Visual Studio 2019 version 16.5.1 | 16.5.1 | 2019 | 1925 | 192528611 | 14.25 |
| Visual Studio 2019 version 16.6.2 | 16.6.2 | 2019 | 1926 | 192628806 | 14.26 |
| Visual Studio 2019 version 16.7 | 16.7 | 2019 | 1927 | 192729112 | 14.27 |
| Visual Studio 2019 version 16.8.1 | 16.8.1 | 2019 | 1928 | 192829333 | 14.28 |
| Visual Studio 2019 version 16.8.2 | 16.8.2 | 2019 | 1928 | 192829334 | 14.28 |
| Visual Studio 2019 version 16.9.0 | 16.9.0 | 2019 | 1928 | 192829910 | 14.28 |
| Visual Studio 2019 version 16.9.2 | 16.9.2 | 2019 | 1928 | 192829913 | 14.28 |
| Visual Studio 2019 version 16.9.17 | 16.9.17 | 2019 | 1928 | 192829921 | 14.28 |
| Visual Studio 2019 version 16.9.18 | 16.9.18 | 2019 | 1928 | 192829921 | 14.28 |
| Visual Studio 2019 version 16.9.19 | 16.9.19 | 2019 | 1928 | 192829923 | 14.28 |
| Visual Studio 2019 version 16.11.2 | 16.11.2 | 2019 | 1929 | 192930133 | 14.29 |
| Visual Studio 2019 version 16.11.8 | 16.11.8 | 2019 | 1929 | 192930138 | 14.29 |
| Visual Studio 2019 version 16.11.9 | 16.11.9 | 2019 | 1929 | 192930139 | 14.29 |
| Visual Studio 2019 version 16.11.10 | 16.11.10 | 2019 | 1929 | 192930140 | 14.29 |
| Visual Studio 2019 version 16.11.11 | 16.11.11 | 2019 | 1929 | 192930141 | 14.29 |
| Visual Studio 2019 version 16.11.12 | 16.11.12 | 2019 | 1929 | 192930142 | 14.29 |
| Visual Studio 2019 version 16.11.16 | 16.11.16 | 2019 | 1929 | 192930145 | 14.29 |
| Visual Studio 2019 version 16.11.17 | 16.11.17 | 2019 | 1929 | 192930146 | 14.29 |
| Visual Studio 2019 version 16.11.21 | 16.11.21 | 2019 | 1929 | 192930147 | 14.29 |
| Visual Studio 2019 version 16.11.24 | 16.11.24 | 2019 | 1929 | 192930148 | 14.29 |
| Visual Studio 2019 version 16.11.27 | 16.11.27 | 2019 | 1929 | 192930151 | 14.29 |
| Visual Studio 2019 version 16.11.35 | 16.11.35 | 2019 | 1929 | 192930154 | 14.29 |
| Visual Studio 2022 version 17.0.1 | 17.0.1 | 2022 | 1930 | 193030705 | 14.30 |
| Visual Studio 2022 version 17.0.2 | 17.0.2 | 2022 | 1930 | 193030706 | 14.31 |
| Visual Studio 2022 version 17.1.3 | 17.1.3 | 2022 | 1931 | 193131105 | 14.31 |
| Visual Studio 2022 version 17.2.2 | 17.2.2 | 2022 | 1932 | 193231329 | 14.32 |
| Visual Studio 2022 version 17.3.4 | 17.3.4 | 2022 | 1933 | 193331630 | 14.33 |
| Visual Studio 2022 version 17.4.0 | 17.4.0 | 2022 | 1934 | 193431933 | 14.34 |
| Visual Studio 2022 version 17.5.0 | 17.5.0 | 2022 | 1935 | 193532215 | 14.35 |
| Visual Studio 2022 version 17.6.0 | 17.6.0 | 2022 | 1936 | 193632532 | 14.36 |
| Visual Studio 2022 version 17.6.2 | 17.6.2 | 2022 | 1936 | 193632532 | 14.36.32532 |
| Visual Studio 2022 version 17.6.4 | 17.6.4 | 2022 | 1936 | 193632535 | 14.36.32532 |
| Visual Studio 2022 version 17.7.0 | 17.7.0 | 2022 | 1937 | 193732822 | 14.36.32543 |
| Visual Studio 2022 version 17.8.0 | 17.8.0 | 2022 | 1938 | 193833130 | 14.38.33135 |
| Visual Studio 2022 version 17.9.1 | 17.9.1 | 2022 | 1939 | 193933520 | 14.39.33520 |
| Visual Studio 2022 version 17.9.6 | 17.9.6 | 2022 | 1939 | 193933523 | 14.39.33523 |
| Visual Studio 2022 version 17.10.1 | 17.10.1 | 2022 | 1940 | 194033811 | 14.40.33811 |
| Visual Studio 2022 version 17.10.10 | 17.10.10 | 2022 | 1940 | 194033818 | 14.40.33818 |
| Visual Studio 2022 version 17.11.0 | 17.11.0 | 2022 | 1941 | 194134120 | 14.41.34120 |
| Visual Studio 2022 version 17.12.4 | 17.12.4 | 2022 | 1942 | 194234436 | 14.42.34436 |
| Visual Studio 2022 version 17.13.0 | 17.13.0 | 2022 | 1943 | 194334808 | 14.43.34808 |
| Visual Studio 2022 version 17.13.6 | 17.13.6 | 2022 | 1943 | 194334810 | 14.43.34810 |
비주얼 C++ 컴파일러 ABI는 역사적으로 주요 컴파일러 릴리스마다 변경되었다. 이는 특히 STL 컨테이너의 경우에 해당하며, 컨테이너 크기가 컴파일러 릴리스마다 많이 달라졌다. 따라서 마이크로소프트는 다른 컴파일러 버전으로 컴파일된 클라이언트 코드를 가능하게 하고자 할 때 모듈 경계에서 C++ 인터페이스를 사용하지 않는 것을 권장한다. C++ 대신 마이크로소프트는 컴파일러 릴리스 간에 안정적인 ABI를 갖도록 설계된 C 또는 COM 인터페이스를 사용할 것을 권장한다.
모든 14.x MSVC 릴리스는 안정적인 ABI를 가지며, 다음 제한 사항을 고려하면 이 버전으로 빌드된 바이너리를 전방 호환 방식으로 혼합할 수 있다.
비주얼 C++는 다양한 버전의 C 런타임 라이브러리를 함께 제공한다. 이는 사용자가 사용 가능한 라이브러리 중 어느 것으로든 코드를 컴파일할 수 있다는 것을 의미한다. 그러나 이는 동일한 프로그램에서 다른 구성 요소(DLL, EXE)를 사용할 때 일부 문제를 일으킬 수 있다. 일반적인 예는 다른 라이브러리를 사용하는 프로그램이다. 사용자는 그 의미를 이해하지 못하는 한 프로그램의 모든 구성 요소에 대해 동일한 C 런타임을 사용해야 한다. 마이크로소프트는 가능한 문제를 피하기 위해 멀티스레드, 동적 링크 라이브러리(/MD 또는 /MDd 컴파일러 옵션)를 사용할 것을 권장한다.
마이크로소프트의 CRT는 POSIX 인터페이스의 큰 부분 집합을 구현하지만, 비주얼 C++ 컴파일러는 기본적으로 이러한 함수를 사용할 때마다 경고를 발생시킨다. 그 이유는 C 및 C++ 표준은 구현 정의 인터페이스 앞에 밑줄 접두사를 요구하므로 이러한 함수의 사용은 비표준이기 때문이다. 그러나 실제로 POSIX 호환 시스템은 이러한 밑줄이 있는 이름을 받아들이지 않으며, 대신 경고를 끄는 것이 더 이식성이 좋다.
이 제품은 원래 C 프로그래밍 언어를 위한 IDE로 시작했지만, 오랫동안 컴파일러의 해당 언어 지원은 1989년의 원래 C 표준에만 부합했으며, 표준의 C99 개정판은 지원하지 않았다. 2011년에도 C99 출판 후 10년이 넘었지만 C99를 지원할 계획은 없었다.
비주얼 C++ 2013은 마침내 C 모드에서 다양한 C99 기능(지정된 초기화, 복합 리터럴, _Bool 유형 포함)에 대한 지원을 추가했지만, 여전히 완전하지는 않았다. 비주얼 C++ 2015는 C99 지원을 더욱 향상시켜, 컴파일러가 아직 지원하지 않는 C99 언어 기능을 요구하는 기능을 제외하고 C99 표준 라이브러리를 완전히 지원했다.
C11 표준 개정판의 대부분의 변경 사항은 비주얼 C++ 2017에서 여전히 지원되지 않았다. 예를 들어, _Generic 키워드를 통한 일반 선택은 컴파일러에서 지원되지 않으며 구문 오류를 발생시킨다.
전처리기(preprocessor)는 2018년에 C11을 염두에 두고 재정비되었다.
C11 완전 호환성은 우리의 로드맵에 있으며, 전처리기를 업데이트하는 것은 그 과정의 첫 번째 단계일 뿐입니다. C11
_Generic기능은 실제로 전처리기 부분이 아니므로 아직 구현되지 않았습니다. 구현되면 이 기능이 기존 또는 업데이트된 전처리기 로직 사용 여부와 관계없이 작동할 것으로 예상합니다.
_Generic 지원은 2020년 2월 현재 MSVC에 커밋되었다.
2020년 9월, 마이크로소프트는 MSVC에서 C11 및 C17 표준 지원이 버전 16.8에서 제공될 것이라고 발표했다. 여기에는 선택적 기능이 포함되지 않았지만, 마이크로소프트는 나중에 아토믹 및 스레드 지원을 추가할 계획이라고 밝혔다. 버전 17.5에서는 아토믹에 대한 부분적(아토믹 락이 누락되었으므로)이고 실험적인(즉, 컴파일러 플래그 /experimental:c11atomics 뒤에 숨겨진) 지원이 추가되었으며 버전 17.8에서는 스레드 지원이 추가되었는데, 이번에는 컴파일러 플래그 뒤에 숨겨지지 않았다.
기본 설정으로 MSVC는 2단계 이름 조회를 수행하지 않아 광범위한 잘못된 코드를 플래그 지정하지 못한다. 대부분의 검사는 템플릿 인스턴스화로 연기된다. 최근 버전에서는 이 동작을 개선했지만, 명령줄 옵션 /permissive-를 통해 활성화해야 한다.
1989년 2월 BYTE지는 마이크로소프트 C 5.1의 OS/2 지원, 대화형 개발을 위한 QuickC, 그리고 CodeView 디버거를 "탁월하다"고 평가했다. 왓콤 C/C++가 약간 더 빠른 코드를 생성했지만, 잡지는 개발자들이 "마이크로소프트의 더 친근하고 강력한 도구를 여전히 선호할 수 있다"고 말했다.
This alone is not a dispositive link, as Visual C++ 6.0, released in 1998, still has proponents mostly because it does not require the installation of Microsoft’s .NET framework in order to run, as later versions of Visual C++ do.