마이크로소프트 비주얼 C++

마이크로소프트 비주얼 C++(Microsoft Visual C++, MSVC)는 마이크로소프트의 C, C++, C++/CLI 및 C++/CX 프로그래밍 언어용 컴파일러이다. MSVC는 사유 소프트웨어이며, 원래 독립형 제품이었으나 나중에 비주얼 스튜디오의 일부가 되었고 셰어웨어 및 프리웨어 형태로 제공된다. 특히 윈도우 API, DirectX 및 .NET용으로 작성된 C++ 코드를 개발하고 디버그하는 도구를 제공한다.

많은 응용 소프트웨어는 올바르게 작동하기 위해 재배포 가능한 비주얼 C++ 런타임 라이브러리 패키지를 필요로 한다. 이러한 패키지는 지원하는 응용 프로그램과 별도로 자주 설치되어 여러 응용 프로그램이 단 한 번의 설치로 패키지를 사용할 수 있도록 한다. 이러한 비주얼 C++ 재배포 가능 및 런타임 패키지는 대부분의 응용 프로그램이 사용하는 표준 라이브러리용으로 설치된다."Do I need these Microsoft Visual C++ redistributables?". Ask Leo!. Retrieved 2012-11-18.

 역사 
비주얼 C++의 전신은 마이크로소프트 C/C++라고 불렸다. 마이크로소프트 QuickC 2.5와 윈도우 1.0용 마이크로소프트 QuickC도 있었다. 비주얼 C++ 컴파일러는 여전히 마이크로소프트 C/C++로 알려져 있으며, 비주얼 C++ 2015 업데이트 2 출시 시점에서 버전 14.0.23918.0이다.

 16비트 버전 
 1983년에 래티스 C를 기반으로 한 마이크로소프트 C 1.0은 마이크로소프트의 첫 C 제품이었다. 이것은 K&R C 호환이 아니었다.
 C 2.0은 대형 모델 지원을 추가하여 코드 세그먼트와 데이터 세그먼트 모두에 최대 1MiB를 허용했다.
 C 3.0은 마이크로소프트 내부에서 개발된 첫 버전이었다. 이 버전은 K&R 및 이후의 ANSI 표준과의 호환성을 목표로 했다. 1984년 초에 마이크로소프트 내부에서 (윈도우 및 제닉스 개발용으로) 사용되었으며, 1985년에 제품으로 출시되었다.
 C 4.0은 최적화 및 소스 수준 디버거인 CodeView를 추가했다.
 C 5.0은 루프 최적화 및 대용량 메모리 모델 (64KB보다 큰 배열) 지원을 추가했다.
 1988년에 출시된 C 5.1은 OS/2 1.x용 프로그램 컴파일을 허용했다. 14개의 5.25인치 디스크(이 중 2개는 1.2MB, 나머지는 360k) 버전에는 QuickC가 포함되어 있었다. OS/2 소프트웨어 개발 키트와 함께 제공되는 11개의 720k 3.5인치 디스크 버전에는 MASM 5.1(MS-DOS 및 OS/2 1.x 모두에서 작동하는 단일 실행 파일)이 포함되어 있었다.
 1989년에 출시된 C 6.0은 작은 메모리 모델 지원과 ANSI C89 표준에 대한 더 나은 지원을 추가했다(문서에는 100% 호환은 아니지만 실용적인 목적에는 충분히 가깝다고 명시되어 있다). 이 버전은 프로그래머 워크벤치 IDE, 전역 흐름 분석, 소스 브라우저 및 새로운 디버거를 추가했다. 많은 사람들이 놀랍게도 경쟁사들은 이미 C++ 제품을 가지고 있었음에도 불구하고 C++가 포함되지 않았다.
 C/C++ 7.0은 1992년에 출시되었다. OS/2 지원이 중단되었다. 컴파일에는 386 프로세서와 포함된 도스 확장자, 386MAX가 필요했지만, 사용자가 자신의 프로그램에서 도스 확장자를 대상으로 할 수 있도록 하려면 나중에 출시된 여러 타사 도구 중 하나가 필요했다. C++ 및 MFC (Microsoft Foundation Class Library) 1.0에 대한 내장 지원을 추가했다.Retrieved from http://support.microsoft.com/kb/196831.
 MFC 2.0을 포함한 비주얼 C++ 1.0은 1993년 2월에 출시된 "비주얼" C++의 첫 버전이었다. Cfront 2.1 호환이었으며 두 가지 에디션으로 제공되었다.
 표준: 윈도우용 QuickC를 대체했다.
 프로페셔널: C/C++ 7.0을 대체했다. 도스 및 윈도우 애플리케이션을 모두 빌드할 수 있는 기능, 최적화 컴파일러, 소스 프로파일러 및 윈도우 3.1 SDK를 포함했다. Phar Lap 286 도스 확장자 라이트도 포함되었다.
 비주얼 C++ 1.5는 1993년 12월에 출시되었으며, MFC 2.5를 포함하고 MFC에 OLE 2.0 및 ODBC 지원을 추가했다. 이것은 CD-ROM으로만 제공된 첫 번째 비주얼 C++ 버전이었다.
 비주얼 C++ 1.51 및 1.52는 구독 서비스의 일부로 제공되었다.
 비주얼 C++ 1.52b는 1.52와 유사하지만 컨트롤 개발 키트가 포함되어 있지 않다.
 비주얼 C++ 1.52c는 1.5의 패치 버전이었다. 마이크로소프트 윈도우 3.x의 마지막이자 가장 인기 있는 개발 플랫폼이라고 할 수 있다. 이것은 마이크로소프트 개발자 네트워크를 통해 제공된다.

 32비트 전용 버전 
 1993년에 출시된 비주얼 C++ 1.0 (원래 이름: Visual C++ 32비트 에디션)은 인텔 386 아키텍처를 위한 32비트 개발 (및 호스트로 32비트 윈도우 NT 필요)을 위한 첫 버전이었다. 16비트 버전 1.5가 출시되었을 때 출시되었지만, OLE2 및 ODBC 지원은 포함하지 않았다. 비주얼 C++ 1.5가 포함된 Visual C++ 16/32비트 스위트라는 번들로도 제공되었다.
 MFC 3.0을 포함한 비주얼 C++ 2.0은 32비트 전용의 첫 버전이었다. 여러 면에서 이 버전은 윈도우 95 (당시 코드명 "시카고")가 아직 출시되지 않았고, 윈도우 NT는 시장 점유율이 작았기 때문에 시대를 앞서갔다. 마이크로소프트는 비주얼 C++ 1.52를 포함한 2.1까지 2.x 릴리스의 일부로 비주얼 C++ 1.5를 포함하고 업데이트했으며, 16비트 및 32비트 버전의 컨트롤 개발 키트(CDK)가 모두 포함되었다. 비주얼 C++ 2.x는 또한 Win32s 개발을 지원했다. 이것은 마이크로소프트 개발자 네트워크를 통해 제공된다. MIPS 및 Alpha 프로세서용 Visual C++ 2.0 RISC 에디션과 매킨토시 (68000 명령어 세트)용 크로스 플랫폼 에디션이 있었다.
 매킨토시용 마이크로소프트 비주얼 C++ 크로스 개발 에디션은 윈도우 이식성 라이브러리(원래 매킨토시용 윈도우 라이브러리 또는 매킨토시용 윈도우 레이어(WLM))를 도입한 비주얼 C++의 애드온으로, 개발자가 Win32 및 MFC API를 사용하여 68000 아키텍처 매킨토시 컴퓨터용으로 컴파일될 수 있는 애플리케이션을 작성할 수 있도록 했다.
 비주얼 C++ 2.1 및 2.2는 구독을 통해 사용할 수 있는 2.0의 업데이트였다.
 1995년 12월 11일에 출시된 비주얼 C++ 4.0은 개발자 스튜디오 IDE를 도입했다. 당시 새로웠던 중첩되지 않는 패널(탐색 패널, 편집기/소스 수준 디버거 패널, 콘솔 출력 패널)의 타일형 레이아웃은 (2025년 현재) 비주얼 스튜디오 제품군에서 계속되고 있다. 비주얼 C++ 4.0은 MFC 4.0을 포함했으며, 윈도우 95 및 윈도우 NT용으로 설계되었다. 레거시 (윈도우 3.x/DOS) 프로젝트를 지원하기 위해 4.0은 비주얼 C++ 1.52 설치 CD와 함께 번들로 제공되었다. 구독을 통해 사용할 수 있는 업데이트에는 마이크로소프트 게임 SDK (나중에 DirectX SDK로 별도 출시됨)가 포함된 비주얼 C++ 4.1과 비주얼 C++ 4.2가 포함되었다. 버전 번호 3.0은 비주얼 C++ 4.0과 MFC 4.0의 버전 번호 패리티를 맞추기 위해 건너뛰었다.
 비주얼 C++ 4.2는 윈도우 3.x (Win32s) 개발을 지원하지 않았다. 이것은 Mac용 크로스 플랫폼 에디션을 사용할 수 있는 마지막 버전이었으며, 파워PC 명령어 세트 컴파일도 허용했다는 점에서 2.x 버전과 달랐다.
 MFC 4.21을 포함하고 1997년 4월 28일에 출시된 비주얼 C++ 5.0 (비주얼 스튜디오 97과 번들로 제공)은 4.2에서 크게 업그레이드되었다. 네 가지 에디션으로 제공되었다: Learning, Professional, Enterprise, 및 RISC.
 비주얼 C++ 6.0 (일반적으로 VC6으로 알려져 있으며, 표준, 프로페셔널 및 엔터프라이즈 에디션으로 독립형으로 제공되었고, 비주얼 스튜디오 6.0과 번들로 제공됨)은 MFC 6.0을 포함하여 1998년에 출시되었다. 이 출시는 MFC에 대한 예상 업데이트가 포함되지 않아 다소 논란이 되었다. 비주얼 C++ 6.0은 여전히 매우 인기가 많고 레거시 프로젝트를 유지 관리하는 데 자주 사용된다. 그러나 이 버전은 윈도우 XP에서, 특히 디버깅 모드에서 문제가 있다(예: 정적 변수 값이 표시되지 않음). 디버깅 문제는 "Visual C++ 6.0 프로세서 팩"이라는 패치로 해결할 수 있다.This page stresses that Users must also be running Windows 98, Windows NT 4.0, or Windows 2000. Retrieved from http://msdn2.microsoft.com/en-us/vstudio/aa718349.aspx. 버전 번호: 12.00.8804
 비주얼 C++ .NET 2002 (비주얼 C++ 7.0으로도 알려져 있음)는 MFC 7.0을 포함하여 2002년에 출시되었으며, 링크 타임 코드 생성 및 디버깅 런타임 검사, .NET 1.0, 비주얼 C# 및 매니지드 C++를 지원했다. 새로운 사용자 인터페이스는 비주얼 베이직의 많은 단축키와 규칙을 사용했는데, 이는 C++ 개발자들 사이에서 인기가 없는 이유 중 하나였다. 버전 번호: 13.00.9466
 비주얼 C++ .NET 2003 (비주얼 C++ 7.1로도 알려져 있음)은 MFC 7.1을 포함하여 2003년에 .NET 1.1과 함께 출시되었으며, 비주얼 C++ .NET 2002의 주요 업그레이드였고 C99 "long long" 구문을 지원하는 첫 버전이었다. 이것은 비주얼 C++ .NET 2002의 패치로 간주되었다. 따라서 비주얼 스튜디오 .NET 2003의 영문 업그레이드 버전은 비주얼 스튜디오 .NET 2002의 영문 버전 소유자에게 최소 비용으로 제공되었다. 윈도우 98이 공식적으로 지원되는 가장 낮은 버전이다. 간단한 프로그램은 윈도우 95 및 NT 4.0에서 작동하지만, 더 복잡한 프로그램은 ws2_32.dll을 참조하거나 kernel32.dll에 없는 함수를 참조하는 것과 같은 문제를 일으킬 수 있다. 컴파일러의 이후 버전(비주얼 C++ 2005)에서는 간단한 프로그램도 작동하지 않는데(C 라이브러리를 교체하지 않는 한), 이는 윈도우 98 이상에서만 존재하는 kernel32.dll의 IsDebuggerPresent 함수를 참조하기 때문이다. 버전 번호: 13.10.3077
 eMbedded 비주얼 C++Douglas Boling :Programming Microsoft Windows CE .NET, Third Edition Microsoft Press; 3rd edition (June 25, 2003) Paperback: 1264 pages  - Companion CD with Microsoft eMbedded Visual C++ 4.0 Service Pack 2 는 다양한 버전으로 윈도우 CE 운영체제의 일부 버전을 개발하는 데 사용되었다. 초기에는 비주얼 C++ 6.0에 추가된 도구로 구성된 개발 환경을 대체했다. eMbedded 비주얼 C++는 마이크로소프트 비주얼 스튜디오 2005에 의해 별도의 개발 환경으로 대체되었다.

 32비트 및 64비트 버전 
 MFC 8.0을 포함한 비주얼 C++ 2005 (비주얼 C++ 8.0으로도 알려져 있음)는 2005년 11월에 출시되었다. 이 버전은 .NET 2.0을 지원하며, 이전 버전(Managed C++)을 대체하기 위한 목적으로 닷넷 프레임워크를 대상으로 하는 새로운 C++ 버전(C++/CLI)을 포함한다. Managed C++ for CLI는 컴파일러 옵션을 통해 여전히 사용할 수 있다. 또한 OpenMP를 도입했다. 비주얼 C++ 2005와 함께 마이크로소프트는 팀 파운데이션 서버도 도입했다. 비주얼 C++ 8.0은 비주얼 스튜디오 6.0으로 생성된 MFC AppWizard 프로젝트를 컴파일하는 데 문제가 있으므로, 다시 작성하는 것이 불가능할 경우 원래 IDE로 레거시 프로젝트를 계속 유지 관리할 수 있다. 비주얼 C++ 2005는 윈도우 98 및 윈도우 미를 대상으로 할 수 있는 마지막 버전이다.How to: Modify WINVER and _WIN32_WINNTBreaking Changes SP1 버전 (14.00.50727.762)은 마이크로소프트 윈도우 SDK 업데이트 for 윈도우 비스타에서도 사용할 수 있다.
 비주얼 C++ 2008 (비주얼 C++ 9.0으로도 알려져 있음)은 2007년 11월에 출시되었다. 이 버전은 .NET 3.5를 지원한다. Managed C++ for CLI는 컴파일러 옵션을 통해 여전히 사용할 수 있다. 기본적으로 비주얼 C++ 2008 런타임(정적 및 동적 연결)에 대해 컴파일된 모든 애플리케이션은 윈도우 2000, 윈도우 XP SP2 이상에서만 작동한다.Windows Platforms (CRT) VC9용으로 출시된 기능 팩은 나중에 SP1에 포함되어 C++ TR1 라이브러리 확장을 지원했다. SP1 버전 (15.00.30729.01)은 윈도우 7용 마이크로소프트 윈도우 SDK에서도 사용할 수 있다.
 일부 비주얼 C++ 버전은 아이테니엄 2를 지원했다.
 비주얼 C++ 2010 (비주얼 C++ 10.0으로도 알려져 있음)은 2010년 4월 12일에 출시되었다. 이 버전은 소스 코드에 대한 정보를 저장하기 위해 SQL 서버 컴팩트 데이터베이스를 사용하는데, 여기에는 더 나은 인텔리센스 및 코드 완성 지원을 위한 IntelliSense 정보도 포함된다. 그러나 비주얼 C++ 2010은 C++/CLI에 대한 IntelliSense를 지원하지 않는다. 이 버전은 병렬 패턴 라이브러리라고 불리는 C++ 병렬 컴퓨팅 라이브러리, C++11에 대한 부분적 지원, 에디슨 디자인 그룹 프런트 엔드를 기반으로 크게 향상된 IntelliSense, 그리고 컴파일러와 생성된 코드 모두의 성능 향상을 추가했다. 이 버전은 .NET 4.0을 기반으로 하지만, 기계어로 컴파일하는 것을 지원한다. 부분적인 C++11 지원은 주로 6가지 컴파일러 기능으로 구성된다: 람다, rvalue 참조, auto, decltype, static_assert, 및 nullptr. C++11은 또한 라이브러리 기능(예: TR1 구성 요소를 std::tr1 네임스페이스에서 std 네임스페이스로 직접 이동)을 지원한다. 가변 인자 템플릿도 고려되었지만, 구현 비용이 많이 드는 다른 기능(람다, rvalue 참조)과 달리, 가변 인자 템플릿은 대다수의 컴파일러 최종 사용자보다는 소수의 라이브러리 작성자에게만 도움이 된다는 점 때문에 우선순위가 낮아 향후 버전으로 연기되었다. 기본적으로 비주얼 C++ 2010 런타임에 대해 컴파일된 모든 애플리케이션은 윈도우 XP SP2 이상에서만 작동한다. RTM 버전 (16.00.30319)은 윈도우 7 및 .NET 프레임워크 4용 윈도우 SDK (WinSDK v7.1)에서도 사용할 수 있다. SP1 버전 (16.00.40219)은 비주얼 스튜디오 2010 서비스 팩 1의 일부로 또는 윈도우 SDK 7.1용 마이크로소프트 비주얼 C++ 2010 서비스 팩 1 컴파일러 업데이트를 통해 사용할 수 있다.FIX: Visual C++ compilers are removed when you upgrade Visual Studio 2010 Professional or Visual Studio 2010 Express to Visual Studio 2010 SP1 if Windows SDK v7.1 is installed
 비주얼 C++ 2012 (비주얼 C++ 11.0으로도 알려져 있음)는 2012년 8월 15일에 출시되었다. 이 버전은 향상된 C++11 지원과 윈도우 런타임 개발을 지원한다.
 비주얼 C++ 2013 (비주얼 C++ 12.0으로도 알려져 있음)은 2013년 10월 17일에 출시되었다. 이 버전은 추가적인 C++11 및 C99 지원을 제공하며, REST SDK를 도입한다.
 비주얼 C++ 2015 (비주얼 C++ 14.0으로도 알려져 있음)는 2015년 7월 20일에 출시되었다. 이 버전은 향상된 C++11/14/17 지원을 제공한다. 마이크로소프트의 발표 없이, 비주얼 스튜디오 2015 업데이트 2는 컴파일된 바이너리에 텔레메트리 호출을 생성하기 시작했다. 일부 사용자들이 이 문제에 대해 마이크로소프트에 문의한 후, 마이크로소프트는 향후 비주얼 스튜디오 2015 업데이트 3으로 컴파일할 때 이러한 텔레메트리 호출을 제거할 것이라고 말했다.Reviewing Microsoft's Automatic Insertion of Telemetry into C++ Binaries 해당 함수는 비주얼 스튜디오 2015 업데이트 3에서 비주얼 C++ CRT 정적 라이브러리에서 제거되었다.
 비주얼 C++ 2017 (비주얼 C++ 14.1로도 알려져 있음)은 2017년 3월 7일에 출시되었다.
 비주얼 C++ 2019 (비주얼 C++ 14.20으로도 알려져 있음)는 2019년 4월 2일에 출시되었다.
 비주얼 C++ 2022 (비주얼 C++ 14.30으로도 알려져 있음)는 2021년 11월 8일에 출시되었다.

 내부 버전 번호 매기기 
비주얼 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++ 런타임 라이브러리뿐만 아니라 컴파일러, 링커, 어셈블러, 기타 빌드 도구, 그리고 일치하는 라이브러리 및 헤더 파일이 포함된다. 다음은 알려진 상관 관계가 있는 버전 번호의 (스크래핑 가능한) 표이다.

+ Visual Studio Versions 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

 호환성 

 ABI 
비주얼 C++ 컴파일러 ABI는 역사적으로 주요 컴파일러 릴리스마다 변경되었다.Microsoft MSDN: Breaking Changes in Visual C++ 이는 특히 STL 컨테이너의 경우에 해당하며, 컨테이너 크기가 컴파일러 릴리스마다 많이 달라졌다.Microsoft MSDN: Containers (Modern C++) 따라서 마이크로소프트는 다른 컴파일러 버전으로 컴파일된 클라이언트 코드를 가능하게 하고자 할 때 모듈 경계에서 C++ 인터페이스를 사용하지 않는 것을 권장한다. C++ 대신 마이크로소프트는 컴파일러 릴리스 간에 안정적인 ABI를 갖도록 설계된 CMicrosoft MSDN: Portability At ABI Boundaries (Modern C++) 또는 COMMicrosoft forum: Binary compatibility across Visual C++ versions  인터페이스를 사용할 것을 권장한다.

모든 14.x MSVC 릴리스는 안정적인 ABI를 가지며,docs.microsoft.com: C++ binary compatibility between Visual Studio 2015, 2017, and 2019 다음 제한 사항을 고려하면 이 버전으로 빌드된 바이너리를 전방 호환 방식으로 혼합할 수 있다.
 사용된 툴셋 버전은 링크된 모든 바이너리를 빌드하는 데 사용된 최고 툴셋 버전보다 같거나 높아야 한다.
 MSVC 재배포 가능 버전은 모든 애플리케이션 구성 요소에서 사용된 툴셋 버전보다 같거나 높아야 한다.
 /GL (전체 프로그램 최적화)로 컴파일된 정적 라이브러리 또는 오브젝트 파일은 버전 간에 이진 호환성이 없으며 정확히 동일한 툴셋을 사용해야 한다.

 C 런타임 라이브러리 
비주얼 C++는 다양한 버전의 C 런타임 라이브러리를 함께 제공한다.C Run-Time Libraries 이는 사용자가 사용 가능한 라이브러리 중 어느 것으로든 코드를 컴파일할 수 있다는 것을 의미한다. 그러나 이는 동일한 프로그램에서 다른 구성 요소(DLL, EXE)를 사용할 때 일부 문제를 일으킬 수 있다. 일반적인 예는 다른 라이브러리를 사용하는 프로그램이다. 사용자는 그 의미를 이해하지 못하는 한 프로그램의 모든 구성 요소에 대해 동일한 C 런타임을 사용해야 한다. 마이크로소프트는 가능한 문제를 피하기 위해 멀티스레드, 동적 링크 라이브러리(/MD 또는 /MDd 컴파일러 옵션)를 사용할 것을 권장한다.

 POSIX 
마이크로소프트의 CRT는 POSIX 인터페이스의 큰 부분 집합을 구현하지만, 비주얼 C++ 컴파일러는 기본적으로 이러한 함수를 사용할 때마다 경고를 발생시킨다. 그 이유는 C 및 C++ 표준은 구현 정의 인터페이스 앞에 밑줄 접두사를 요구하므로 이러한 함수의 사용은 비표준이기 때문이다. 그러나 실제로 POSIX 호환 시스템은 이러한 밑줄이 있는 이름을 받아들이지 않으며, 대신 경고를 끄는 것이 더 이식성이 좋다.

 C 
이 제품은 원래 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을 염두에 두고 재정비되었다.

_Generic 지원은 2020년 2월 현재 MSVC에 커밋되었다.

2020년 9월, 마이크로소프트는 MSVC에서 C11 및 C17 표준 지원이 버전 16.8에서 제공될 것이라고 발표했다. 여기에는 선택적 기능이 포함되지 않았지만, 마이크로소프트는 나중에 아토믹 및 스레드 지원을 추가할 계획이라고 밝혔다. 버전 17.5에서는 아토믹에 대한 부분적(아토믹 락이 누락되었으므로)이고 실험적인(즉, 컴파일러 플래그 /experimental:c11atomics 뒤에 숨겨진) 지원이 추가되었으며 버전 17.8에서는 스레드 지원이 추가되었는데, 이번에는 컴파일러 플래그 뒤에 숨겨지지 않았다.

 C++ 
기본 설정으로 MSVC는 2단계 이름 조회를 수행하지 않아 광범위한 잘못된 코드를 플래그 지정하지 못한다. 대부분의 검사는 템플릿 인스턴스화로 연기된다. 최근 버전에서는 이 동작을 개선했지만, 명령줄 옵션 /permissive-를 통해 활성화해야 한다.

 평가 
1989년 2월 BYTE지는 마이크로소프트 C 5.1의 OS/2 지원, 대화형 개발을 위한 QuickC, 그리고 CodeView 디버거를 "탁월하다"고 평가했다. 왓콤 C/C++가 약간 더 빠른 코드를 생성했지만, 잡지는 개발자들이 "마이크로소프트의 더 친근하고 강력한 도구를 여전히 선호할 수 있다"고 말했다.

 각주 

 더 읽어보기 




 외부 링크 

 Visual Studio 에디션의 C++ 도구 및 기능
 마이크로소프트 C++ 빌드 도구
 마이크로소프트 채널 9의 C9::GoingNative

분류:통합 개발 환경
분류:마이크로소프트 개발 도구
분류:마이크로소프트 비주얼 스튜디오
분류:C 컴파일러
분류:C++ 컴파일러
분류:1993년 소프트웨어