마이크로소프트 비주얼 C++
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
마이크로소프트 비주얼 C++는 마이크로소프트에서 개발한 C, C++, C++/CLI, C++/CX 소스 코드용 통합 개발 환경(IDE)으로, 1983년 MS-DOS용 C 컴파일러를 시작으로 32비트 및 64비트 버전을 거쳐 현재에 이르렀다. 초기에는 C 표준을 지원했으며, 이후 C++ 표준과 C99, C11, C14, C17, C++11, C++14, C++17, C++20 등의 언어 및 기능을 지원한다. 비주얼 C++는 인라인 어셈블러, COM 지원, OpenMP 지원, .NET/WinRT 지원 등 다양한 기능을 제공하며, 런타임 라이브러리의 정적 또는 동적 연결을 선택할 수 있다. 또한, Express, Community 에디션과 같은 무료 버전을 제공하여 초보자도 사용할 수 있다.
더 읽어볼만한 페이지
- C++ 컴파일러 - GNU 컴파일러 모음
GNU 컴파일러 모음(GCC)은 리처드 스톨먼이 1987년 처음 출시한 자유 소프트웨어 컴파일러 시스템으로, C, C++, Fortran, Ada, Go 등 다양한 프로그래밍 언어를 지원하며 여러 명령어 집합 아키텍처와 플랫폼에서 널리 사용된다. - C++ 컴파일러 - C++빌더
C++빌더는 델파이와 동일한 IDE를 사용하는 엠바카데로 테크놀로지스에서 개발한 C++ 통합 개발 환경이며, 윈도우, macOS, iOS, 안드로이드 등 다양한 플랫폼을 지원하고 VCL, FireMonkey, CLX와 같은 GUI 라이브러리를 제공한다. - C 컴파일러 - GNU 컴파일러 모음
GNU 컴파일러 모음(GCC)은 리처드 스톨먼이 1987년 처음 출시한 자유 소프트웨어 컴파일러 시스템으로, C, C++, Fortran, Ada, Go 등 다양한 프로그래밍 언어를 지원하며 여러 명령어 집합 아키텍처와 플랫폼에서 널리 사용된다. - C 컴파일러 - MinGW
MinGW는 윈도우에서 GNU 툴체인을 사용할 수 있게 해주는 프로젝트이며, MSYS를 통해 유닉스 셸 환경을 제공하고, C, C++, Objective-C 등 다양한 언어를 지원하며 윈도우 API를 직접 호출하여 호환성 계층 DLL을 요구하지 않는다. - 마이크로소프트 비주얼 스튜디오 - 비주얼 베이직
비주얼 베이직은 1991년 마이크로소프트에서 출시된 GUI 기반 응용 프로그램 개발에 강점을 가진 프로그래밍 언어이며, 윈도우용 응용 프로그램 및 데이터베이스 조작 프로그램 개발에 주로 사용되었고, 2005년 표준 지원이 중단되었다. - 마이크로소프트 비주얼 스튜디오 - J 샤프
J#은 마이크로소프트에서 개발한 .NET Framework 기반의 프로그래밍 언어로, 자바와 유사한 문법을 가지며 기존 자바 코드의 .NET 플랫폼 이전 및 .NET 언어와의 상호 운용성을 지원했으나 현재는 개발이 중단되었다.
마이크로소프트 비주얼 C++ - [IT 관련 정보]에 관한 문서 | |
---|---|
기본 정보 | |
![]() | |
개발사 | 마이크로소프트 |
최초 출시일 | 1993년 2월 |
최신 버전 | 14.40.33816 |
프로그래밍 언어 | C++ |
운영 체제 | 윈도우 |
플랫폼 | IA-32 x86-64 ARM |
언어 | 영어 중국어 (간체, 번체) 체코어 프랑스어 독일어 이탈리아어 일본어 한국어 폴란드어 포르투갈어 (브라질) 러시아어 스페인어 터키어 |
종류 | 컴파일러 |
라이선스 | 트라이얼웨어 프리웨어 |
웹사이트 | Visual C++ 개발자 센터 |
2. 역사
마이크로소프트 비주얼 C++(Visual C++)는 마이크로소프트에서 개발한 C/C++ 컴파일러 및 개발 환경이다. 비주얼 C++는 ''마이크로소프트 C/C++''라는 이름으로 시작되었으며, ''마이크로소프트 퀵C'' 2.5와 ''마이크로소프트 퀵C for Windows'' 1.0도 있었다. 비주얼 C++ 컴파일러는 여전히 ''마이크로소프트 C/C++''로 알려져 있다.
초기에는 16비트 환경을 대상으로 개발되었으며, 이후 32비트, 64비트, 그리고 ARM 아키텍처까지 지원 범위를 넓혔다. 각 버전별 주요 특징은 다음과 같다.
제품명 | 제품 버전 | 내부 버전 | _MSC_VER | 출시 연도 | 비고 |
---|---|---|---|---|---|
C Compiler 1.0 | - | - | 100 | 1983년 | 래티스 C(Lattice C) 기반 MS-DOS용 컴파일러. K&R 미지원. |
C Compiler 2.0 | - | - | 200 | Large Model 지원. | |
C Compiler 3.0 | - | - | 300 | 1985년 | K&R 지원. |
C Compiler 4.0 | - | - | 400 | 최적화 강화, 소스 레벨 디버거 CodeView 포함. | |
C Compiler 5.0 | - | - | 500 | 1987년 | 루프 최적화, Huge Model 지원, 염가판 Quick C 1.0 |
C Compiler 5.1 | - | - | 1989년 | OS/2 1.0 지원, 염가판 Quick C 2.0 | |
C Compiler 6.0 | - | - | 600 | 1989년 | 별도 SDK 필요. |
C/C++ Compiler 7.0 | - | - | 700 | 1992년 | MFC 포함 첫 번째 버전. |
Visual C++ 1.0 | 1.0 | 1.0 | 800 | 1993년 | 32비트 지원. |
Visual C++ 1.5 | 1.5 | 1.5 | 800 | 1993년 | |
Visual C++ 1.51 | 1.51 | 1.51 | 800 | Visual C++ 2.0/4.0 Pro 일본어판에 포함. | |
Visual C++ 1.52c | 1.52 | 1.52c | 800 | 영어판만 제공, MS-DOS/Win16 바이너리 생성 가능 마지막 버전. | |
Visual C++ 2.0 | 2.0 | 2.0 | 900 | 1995년 | Windows NT 지원, 32비트 전용. |
Visual C++ 2.1 | 2.1 | 2.1 | 900 | ||
Visual C++ 2.2 | 2.2 | 2.2 | 900 | ||
Visual C++ 4.0 | 4.0 | 4.0 | 1000 | 1996년 | Windows 95 지원 |
Visual C++ 4.1 | 4.1 | 4.1 | 1010 | 1996년 | Win32s에서 작동하는 Win32 바이너리 생성 가능 마지막 버전. |
Visual C++ 4.2 | 4.2 | 4.2 | 1020 | 1996년 | |
Visual C++ 5.0 | 5.0 | 5.0 | 1100 | 1997년 | |
Visual C++ 6.0 | 6.0 | 6.0 | 1200 | 1998년 | |
2002 | 7.0 | 1300 | 2002년 | 매니지드 확장 C++ 지원 추가. | |
Visual C++.NET 2003 | 2003 | 7.1 | 1310 | 2003년 | Windows 95에서 작동하는 Win32 바이너리 생성 가능 마지막 버전, 기본 문자 코드 "멀티바이트 문자열 사용". |
Visual C++ 2005 | 2005 | 8.0 | 1400 | 2005년 | Windows 98/Me/NT4에서 작동하는 Win32 바이너리 생성 가능 마지막 버전, 기본 "유니코드 문자열 사용" 변경, C++/CLI 지원, 코드 분석 /analyze [124]. |
Visual C++ 2008 | 2008 | 9.0 | 1500 | 2007년 | Windows 2000에서 작동하는 Win32 바이너리 생성 가능 마지막 버전[125], IA-64에서 작동 MFC 사용 Win64 바이너리 생성 가능 마지막 버전[126]. |
Visual C++ 2010 | 2010 | 10.0 | 1600 | 2010년 | C++0x 부분 지원, IA-64에서 작동 Win64 바이너리 생성 마지막 버전[127], C++/CLI 언어 인텔리센스 기능 작동 안 함. |
Visual C++ 2012 | 2012 | 11.0 | 1700 | 2012년 | C++11 부분 지원, __cplusplus 정의 199711L(C++98), Windows 스토어 앱 지원(WinRT, C++/CX), C++/CLI 언어 인텔리센스 부활, SSE2 확장 명령 사용(/arch:SSE2) 기본값[128][129][130], DirectX 그래픽 진단 기능, 하위 에디션 코드 분석. |
Visual C++ 2013 | 2013 | 12.0 | 1800 | 2013년 | C++11 강화, C99 대부분 지원, MFC/ATL 멀티바이트 버전 번들 제공 안 함[131], 매니지드 확장 C++ 컴파일 옵션 (/clr:OldSyntax) 사용 가능 마지막 버전. |
Visual C++ 2015 | 2015 | 14.0 | 1900 | 2015년 | C++11/C++14 지원 강화, 리팩토링 기능 실험적 지원[132]. |
Visual C++ 2017 | 2017 | 14.1 | 1910[133] | 2017년 | C++11/C++14/C++17 지원 강화, CMake 지원[134], Windows XP 작동 바이너리 생성 마지막 버전[135]. |
Visual C++ 2019 | 2019 | 14.2 | 1920[133] | 2019년 | C++20 지원 강화, OpenMP 4.0 SIMD 벡터화 실험적 지원[136][137], C++ IntelliCode 제공[138], 에디터 내 C++ 코드 분석 정식 지원[140]. |
Visual C++ 2022 | 2022 | 14.3 | 1930 | 2021년 | C++20/ 지원 강화, C++23 부분 지원.[141]. |
비주얼 C++는 버전 6.0까지 내부 버전과 제품 버전 번호가 같았지만, 2002년부터 출시 연도를 제품명에 사용하기 시작했다. 컴파일러 버전을 나타내는 `_MSC_VER`와 `_MSC_FULL_VER` 전처리기 심볼은 컴파일러 자체인 '''cl.exe'''의 파일 버전을 나타낸다.
2. 1. 초기 버전 (16비트)
마이크로소프트 C 1.0은 래티스 C(Lattice C)를 기반으로 1983년에 출시된 마이크로소프트의 첫 번째 C 제품이었다. C 프로그래밍 언어(The C Programming Language)의 K&R C를 준수하지 않았다. C 2.0은 대형 모델 지원을 추가하여 코드 세그먼트와 데이터 세그먼트 모두 최대 1MiB를 허용했다.[4] C 3.0은 마이크로소프트 내부에서 개발된 첫 번째 버전이었다.[5] 이 버전은 K&R 및 이후의 ANSI 표준과의 호환성을 목표로 했다. 1984년 초부터 마이크로소프트 윈도우(Microsoft Windows) 및 제니X(Xenix) 개발을 위해 마이크로소프트 내부에서 사용되었고, 1985년에 제품으로 출시되었다.C 4.0은 최적화와 소스 레벨 디버거인 코드뷰(CodeView)를 추가했다. C 5.0은 루프 최적화와 거대한 메모리 모델(64KB보다 큰 배열 데이터 구조(arrays)) 지원을 추가했다. 1988년에 출시된 C 5.1은 OS/2 1.x용 프로그램 컴파일을 허용했다.
1989년에 출시된 C 6.0은 작은 메모리 모델 지원과 ANSI C89 표준에 대한 더 나은 지원을 추가했다(문서에는 100% 호환되지 않는다고 명시되어 있지만 실용적인 목적으로는 충분히 가깝다). 또한 "프로그래머 워크벤치" IDE, 전역 흐름 분석, 소스 브라우저 및 새로운 디버거를 추가했다. C++은 포함되지 않았다.[6]
C/C++ 7.0은 1992년에 출시되었다. OS/2 지원이 중단되었다. 컴파일에는 386 프로세서와 포함된 DOS 확장기인 386MAX가 필요했다.[7] C++ 및 마이크로소프트 파운데이션 클래스(Microsoft Foundation Classes, MFC) 1.0에 대한 기본 지원이 추가되었다.[9]
비주얼 C++ 1.0은 MFC 2.0을 포함했으며, 1993년 2월에 출시된 "비주얼" C++의 첫 번째 버전이었다. 이는 Cfront 2.1을 준수했으며[10] 두 가지 에디션으로 제공되었다.[1]
- Standard: 윈도우용 QuickC를 대체했다.
- Professional: C/C++ 7.0을 대체했다. DOS 및 윈도우 애플리케이션을 모두 빌드하는 기능, 최적화 컴파일러(optimizing compiler), 소스 프로파일러(profiler), 윈도우 3.1 SDK가 포함되었다.[10] 파 랩(Phar Lap) 286 DOS Extender Lite도 포함되었다.[11]
비주얼 C++ 1.5는 1993년 12월에 출시되었으며 MFC 2.5를 포함했으며 OLE(Object Linking and Embedding) 2.0 및 ODBC(Open Database Connectivity) 지원을 MFC에 추가했다.[12] 이는 CD-ROM으로만 제공된 비주얼 C++의 첫 번째 버전이었다. 비주얼 C++ 1.51 및 1.52는 구독 서비스의 일부로 제공되었다. 비주얼 C++ 1.52b는 1.52와 유사하지만 제어 개발 키트는 포함되어 있지 않다. 비주얼 C++ 1.52c는 1.5의 패치된 버전이다. 이는 마이크로소프트 윈도우 3.x를 위한 마지막이자 가장 인기 있는 개발 플랫폼이라고 할 수 있다. 이는 마이크로소프트 개발자 네트워크(Microsoft Developer Network)를 통해 사용할 수 있다.
패키지 이름 | 컴파일러 버전 | 출시 | _MSC_VER | MFC | 지원 아키텍처 |
---|---|---|---|---|---|
마이크로소프트 C 5.0 / 퀵-C 1.0 | 5.0 | 1987년 | 500 | - | DOS |
마이크로소프트 C 5.1 / 퀵-C 2.0 | 5.1 | 1989년 | 500 | - | WIN16 |
마이크로소프트 C 6.0 | 6.0 | 1989년 | 600 | - | WIN16 |
마이크로소프트 C/C++ 7.0 | 7.0 | 1992년 | 700 | 1.0 | WIN16 |
비주얼 C++ 1.0 / 퀵-C 2.5 | 8.0 | 1993년 | 800 | 2.0 | WIN16 |
비주얼 C++ 1.5 | 8.0 | 1993년 | 800 | 2.5 | WIN16 |
비주얼 C++ 1.52c | 8.0 | 1994년 | 800 | 2.5 | WIN16 |
2. 2. 32비트 버전
1993년에 출시된 [플랫 메모리 모델](Flat memory model#Flat memory model) 개발용 첫 번째 버전인 마이크로소프트 비주얼 C++ 1.0(원래 이름: Visual C++ 32-bit Edition)은 인텔 386 아키텍처를 위한 버전이었으며, 32비트 윈도우 NT를 호스트로 필요로 했다.[13] 16비트 버전 1.5가 출시되었을 때 함께 출시되었지만, OLE2와 ODBC는 지원하지 않았다. 비주얼 C++ 1.5를 포함하는 Visual C++ 16/32-bit Suite라는 번들로도 제공되었다.[14]MFC 3.0을 포함하는 비주얼 C++ 2.0은 최초의 32비트 전용 버전이었다. 여러 면에서 이 버전은 시대를 앞섰는데, 당시 "시카고"라는 코드명을 가진 윈도우 95가 아직 출시되지 않았고, 윈도우 NT는 시장 점유율이 작았기 때문이다. 마이크로소프트는 비주얼 C++ 1.5를 2.x 릴리스의 일부로 포함하고 업데이트했으며, 비주얼 C++ 1.52를 포함하는 2.1까지 16비트 및 32비트 버전의 제어 개발 키트(CDK)가 모두 포함되었다. 비주얼 C++ 2.x는 Win32s 개발도 지원했다. 마이크로소프트 개발자 네트워크를 통해 사용할 수 있었다. MIPS 및 Alpha 프로세서용 비주얼 C++ 2.0 RISC 에디션과 Macintosh (68000 명령어 집합)용 크로스 플랫폼 에디션이 있었다.[15]
- Macintosh용 마이크로소프트 비주얼 C++ 크로스 개발 에디션은 윈도우 포팅 라이브러리(Windows Portability Library)라고도 알려진 Windows Library for Macintosh[17] 또는 Windows Layer for the Macintosh (WLM)으로 알려진 비주얼 C++용 애드온으로, 개발자가 Win32 및 MFC API에 대해 작성하여 68000 아키텍처 Macintosh 컴퓨터용으로 컴파일할 수 있는 응용 프로그램을 만들 수 있게 해주었다.[16][17]
- 비주얼 C++ 2.1 및 2.2는 구독을 통해 제공되는 2.0의 업데이트였다.
1995년 12월 11일에 출시된 비주얼 C++ 4.0[18]은 개발자 스튜디오 IDE를 도입했다. 당시 획기적이었던 중첩되지 않는 패널의 타일 레이아웃(탐색 패널, 편집기/소스 레벨 디버거 패널 조합, 콘솔 출력 패널)[19]은 2013년 기준으로 비주얼 스튜디오 제품 라인에서 계속 사용되고 있다. 비주얼 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 간의 버전 번호 일관성을 유지하기 위해 건너뛰었다.[20]
비주얼 C++ 4.2는 윈도우 3.x (Win32s) 개발을 지원하지 않았다.[21] 이는 Mac용 크로스 플랫폼 에디션이 제공되는 마지막 버전이었으며, 2.x 버전과 달리 PowerPC 명령어 집합용 컴파일도 허용했다.
MFC 4.21을 포함하고 1997년 4월 28일에 출시된 비주얼 C++ 5.0(비주얼 스튜디오 97과 함께 제공)[18]은 4.2에서 주요 업그레이드였다.[22] 학습,[23] 프로페셔널,[24] 엔터프라이즈,[25] 및 RISC[26]의 4가지 에디션으로 제공되었다.
MFC 6.0을 포함하고 1998년에 출시된 비주얼 C++ 6.0(일반적으로 VC6로 알려져 있으며, 스탠다드, 프로페셔널 및 엔터프라이즈 에디션으로 독립적으로 제공되며 비주얼 스튜디오 6.0과 함께 제공됨)[27][28]은 출시 당시 예상된 MFC 업데이트가 포함되지 않아 논란이 되었다. 비주얼 C++ 6.0은 여전히 널리 사용되며 레거시 프로젝트를 유지하는 데 자주 사용된다. 그러나 이 버전은 윈도우 XP에서 특히 디버깅 모드에서 문제가 있다(예: 정적 변수의 값이 표시되지 않음). 디버깅 문제는 "비주얼 C++ 6.0 프로세서 팩"이라는 패치로 해결할 수 있다.[29] 버전 번호는 12.00.8804이다.
MFC 7.0을 포함하고 2002년에 출시된 비주얼 C++ .NET 2002(비주얼 C++ 7.0으로도 알려짐)는 링크 시간 코드 생성 및 디버깅 런타임 검사, .NET 1.0, 그리고 비주얼 C# 및 Managed C++를 지원했다. 새로운 사용자 인터페이스는 비주얼 베이직의 많은 단축키와 규칙을 사용했는데, 이는 C++ 개발자들 사이에서 인기가 없는 이유 중 하나였다. 버전 번호는 13.00.9466이다.
MFC 7.1을 포함하고 .NET 1.1과 함께 2003년에 출시된 비주얼 C++ .NET 2003(비주얼 C++ 7.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 Visual C++[30]는 다양한 버전으로 윈도우 CE 운영 체제의 일부 버전을 개발하는 데 사용되었다. 처음에는 비주얼 C++ 6.0에 추가된 도구로 구성된 개발 환경을 대체했다. eMbedded Visual C++는 마이크로소프트 비주얼 스튜디오 2005에 의해 별도의 개발 환경으로 대체되었다.
사실상의 Windows 표준 개발 환경이며, 최적화 성능이 매우 높다. Visual C++ 7.1 (.NET 2003)부터 표준 C++ 규격 준수도가 크게 개선되었다[75]。같은 버전에서도 몇 가지 에디션이 존재하며, 이전에는 상위 에디션만 최적화를 지원했지만, Visual C++ 2005부터 기본적인 최적화는 Express를 포함한 모든 에디션에서 할 수 있게 되었다. 단, 2005년에 도입된 프로파일링 기반 최적화(Profile Guided Optimization, PGO)는 상위 에디션에서만 지원된다.
Visual C++ 2005 이후는 Visual Basic나 Visual C# 등의 다른 개발 언어와 통합된 Visual Studio의 패키지로 판매되고 있다. Visual C++ .NET 2003까지는 언어별 제품으로 판매되었지만, 2005년 이후에는 이루어지지 않았다. 판매되는 Visual Studio 패키지에서 기능을 제한한 무료 버전인 Visual C++ Express Edition을 구할 수 있다.
"Visual"이라는 명칭이 붙어 있지만, Visual Basic 등과 달리 RAD가 아니라, 기본적으로 Windows SDK (Windows API)나 MFC를 사용하여 코드 기반의 프로그램을 작성하게 된다(단, 리소스 편집기를 사용하여 대화 상자 윈도우나 메뉴의 외관 디자인만 시각적으로 수행하는 것은 이전부터 가능했다). MFC는 C++ 전용 클래스 라이브러리이며, 애플리케이션 프레임워크 역할도 담당하지만, 기본적으로 Windows API의 얇은 래퍼에 불과하기 때문에, 생산성 측면에서 Visual Basic나 델파이와 같은 RAD에 미치지 못한다. 그러나 Visual C++ 7.0 (.NET 2002) 이후에는, 후술할 관리 확장 C++ 또는 C++/CLI를 사용하여 Windows Forms 애플리케이션(또는 Windows Forms 컴포넌트)을 개발하는 경우에 한하여, 폼 에디터를 시작으로 한 Visual C#나 VB.NET과 같은 RAD 환경을 사용할 수 있다. 또한 Visual C++ 11.0 (2012) 이후에는, 후술할 C++/CX를 사용하여 윈도우 스토어 앱을 개발하는 경우, XAML 에디터를 시작으로 한 RAD 환경을 사용할 수 있다.
또한, 기존의 Win32/MFC 애플리케이션(또는 DLL)에 CLI 지원을 추가함으로써, .NET Framework의 클래스 라이브러리를 병용하는 하이브리드 개발도 할 수 있다. 이로 인해, 예를 들어 Visual C#/VB.NET으로 .NET 기본 클래스 라이브러리를 사용하여 개발한 로직 라이브러리나, Windows Forms/WPF를 사용하여 개발한 GUI 부품을, Win32/MFC 애플리케이션에서 이용하는, 이라는 상호 운용이(제한적이지만) 가능하게 되었다.
Visual C++ 8.0 (2005) 이후는 64비트 명령어 생성에 대응하고 있다. 부속 컴파일러에는, 컴파일러가 동작하는 환경과 같은 네이티브 코드를 생성하는 것과, 32bit (x86) 환경에서 동작하여 64bit (x64 또는 IA-64) 네이티브 코드를 출력하는 것(크로스 컴파일러)이 있다. 32비트 (x86) 환경에서도 크로스 컴파일을 할 수 있다. Visual C++ 11.0 (2012) 이후는 ARM 프로세서용 코드 생성에도 대응하고 있다.
2. 3. 32/64비트 버전
비주얼 C++ 2005 (8.0)는 2005년 11월에 출시되었으며, MFC 8.0을 포함하고 있다. 이 버전은 .NET 2.0을 지원하며, 이전 버전(Managed C++)을 대체하기 위해 .NET 프레임워크를 대상으로 하는 새로운 버전의 C++(C++/CLI)를 포함한다. CLI용 Managed C++는 컴파일러 옵션을 통해 계속 사용할 수 있다. 또한 OpenMP를 도입하였다. 비주얼 C++ 2005는 Windows 98 및 Windows Me를 대상으로 할 수 있는 마지막 버전이다.[31][32] SP1 버전(14.00.50727.762)은 Microsoft Windows Vista용 Microsoft Windows SDK 업데이트에서도 사용할 수 있다.비주얼 C++ 2008 (9.0)은 2007년 11월에 출시되었으며 .NET 3.5를 지원한다. CLI용 Managed C++는 컴파일러 옵션을 통해 계속 사용할 수 있다. 기본적으로 비주얼 C++ 2008 런타임(정적 및 동적 링크)에 대해 컴파일된 모든 애플리케이션은 Windows 2000, Windows XP SP2 이상에서만 작동한다.[33][34] VC9용으로 출시된 기능 팩은 나중에 SP1에 포함되었으며 C++ TR1 라이브러리 확장 지원을 추가했다. SP1 버전(15.00.30729.01)은 Windows 7용 Microsoft Windows SDK에서도 사용할 수 있다.
비주얼 C++ 2010 (10.0)은 2010년 4월 12일에 출시되었으며 SQL Server Compact 데이터베이스를 사용하여 IntelliSense 정보를 저장한다.[35] 그러나 비주얼 C++ 2010은 C++/CLI에 대한 인텔리센스를 지원하지 않는다.[36] 이 버전은 C++ 병렬 컴퓨팅 라이브러리인 Parallel Patterns Library를 추가하고, C++11에 대한 부분적인 지원, Edison Design Group 프런트 엔드를 기반으로 한 개선된 인텔리센스[37], 컴파일러와 생성된 코드 모두에 대한 성능 개선을 제공한다.[38] 이 버전은 .NET 4.0을 기반으로 하지만 기계어 코드로 컴파일을 지원한다. 부분적인 C++11 지원은 주로 람다, rvalue 참조, auto, decltype, static_assert 및 nullptr의 6가지 컴파일러 기능으로 구성된다.[39] C++11은 또한 라이브러리 기능(예: std::tr1 네임스페이스에서 std 네임스페이스로 TR1 구성 요소 이동)을 지원한다. 가변 템플릿도 고려되었지만, 우선 순위가 낮아져 나중 버전으로 연기되었다.[40] 기본적으로 비주얼 C++ 2010 런타임에 대해 컴파일된 모든 애플리케이션은 Windows XP SP2 이상에서만 작동한다. RTM 버전(16.00.30319)은 Windows 7 및 .NET Framework 4용 Windows SDK (WinSDK v7.1)에서도 사용할 수 있다.[41] SP1 버전(16.00.40219)은 비주얼 스튜디오 2010 서비스 팩 1의 일부로 또는 Windows SDK 7.1용 마이크로소프트 비주얼 C++ 2010 서비스 팩 1 컴파일러 업데이트를 통해 사용할 수 있다.[42]
비주얼 C++ 2012 (11.0)는 2012년 8월 15일에 출시되었으며 개선된 C++11 지원과 Windows 런타임 개발 지원을 특징으로 한다.[43]
비주얼 C++ 2013 (12.0)은 2013년 10월 17일에 출시되었으며 C++11 및 C99 지원을 더욱 강화하고 REST SDK를 도입했다.[44]
비주얼 C++ 2015 (14.0)는 2015년 7월 20일에 출시되었으며[45] C++11/14/17 지원을 개선했다.[46]
비주얼 C++ 2017 (14.1)은 2017년 3월 7일에 출시되었다.[49]
비주얼 C++ 2019 (14.20)는 2019년 4월 2일에 출시되었다.[50]
비주얼 C++ 2022 (14.30)는 2021년 11월 8일에 출시되었다.[51]
비주얼 C++ 8.0 (2005) 이후는 64비트 명령어 생성에 대응하고 있다. 부속 컴파일러에는 컴파일러가 동작하는 환경과 같은 네이티브 코드를 생성하는 것과, 32bit (x86) 환경에서 동작하여 64bit (x64 또는 IA-64) 네이티브 코드를 출력하는 크로스 컴파일러가 있다. 32비트 (x86) 환경에서도 크로스 컴파일을 할 수 있다. 비주얼 C++ 11.0 (2012) 이후는 ARM 프로세서용 코드 생성에도 대응하고 있다. 비주얼 C++ 14.1 (2017) 이후에는 ARM64 아키텍처의 네이티브 애플리케이션 개발에도 대응했다 (Visual Studio 2017 v15.9 이상이 필요).[76]
2. 4. 버전별 특징
마이크로소프트 비주얼 C++(Visual C++)는 버전 6.0까지 내부 갱신 번호와 버전 번호가 같았지만, 2002 버전부터는 출시 연도를 이름에 붙이고 있다. 컴파일러 버전은 패키지 이름이나 내부 갱신 번호와 다르며, 비주얼 C++ 내부에 포함된 컴파일러인 "MS C/C++"의 순수 버전이다. 명령행 컴파일러 "CL.EXE"로 확인할 수 있으며, `_MSC_VER`는 전처리 시 컴파일러 버전을 알 수 있는 유일한 매크로 상수이다.제품명 | 제품 버전 | 내부 버전 | _MSC_VER | 출시년도 | 비고 |
---|---|---|---|---|---|
C Compiler 1.0 | - | - | 100 | 1983년 | 래티스 C(Lattice C)를 기반으로 한 MS-DOS용 컴파일러. C 프로그래밍 언어(The C Programming Language)의 K&R C 미지원. |
C Compiler 2.0 | - | - | 200 | 대형 모델 지원. 코드 세그먼트와 데이터 세그먼트 모두 최대 1MiB를 허용.[4] | |
C Compiler 3.0 | - | - | 300 | 1985년 | K&R 지원. 마이크로소프트 내부에서 개발된 첫 번째 버전.[5] |
C Compiler 4.0 | - | - | 400 | 최적화 강화. 소스 레벨 디버거 코드뷰(CodeView)를 포함. | |
C Compiler 5.0 | - | - | 500 | 1987년 | 루프 최적화. 거대한 메모리 모델(64KB보다 큰 배열 데이터 구조(arrays)) 지원. 염가판으로 퀵C(Quick C) 1.0 |
C Compiler 5.1 | - | - | 1989년 | OS/2 1.0 지원. 염가판으로 Quick C 2.0 | |
C Compiler 6.0 | - | - | 600 | 1989년 | 작은 메모리 모델 지원과 ANSI C89 표준에 대한 더 나은 지원. "프로그래머 워크벤치" IDE, 전역 흐름 분석, 소스 브라우저 및 새로운 디버거를 추가.[6] |
C/C++ Compiler 7.0 | - | - | 700 | 1992년 | 마이크로소프트 파운데이션 클래스(Microsoft Foundation Classes, MFC) 1.0에 대한 기본 지원이 추가.[9] |
Visual C++ 1.0 | 1.0 | 1.0 | 800 | 1993년 | Cfront 2.1 준수.[10] MFC 2.0 포함. 32비트 지원. |
Visual C++ 1.5 | 1.5 | 1.5 | 800 | 1993년 | MFC 2.5를 포함했으며 OLE(Object Linking and Embedding) 2.0 및 ODBC(Open Database Connectivity) 지원을 MFC에 추가.[12] |
Visual C++ 1.51 | 1.51 | 1.51 | 800 | Visual C++ 2.0/4.0 Pro 일본어판에 포함. | |
Visual C++ 1.52c | 1.52 | 1.52c | 800 | 영어판만 제공. MS-DOS/Win16 바이너리(프로그램)를 만들 수 있는 마지막 버전. | |
Visual C++ 2.0 | 2.0 | 2.0 | 900 | 1995년 | 윈도우 NT 지원. 32비트 전용. |
Visual C++ 2.1 | 2.1 | 2.1 | 900 | ||
Visual C++ 2.2 | 2.2 | 2.2 | 900 | ||
Visual C++ 4.0 | 4.0 | 4.0 | 1000 | 1996년 | 개발자 스튜디오 IDE 도입. 윈도우 95 지원 |
Visual C++ 4.1 | 4.1 | 4.1 | 1010 | 1996년 | Win32s에서 작동하는 Win32 바이너리(프로그램)를 만들 수 있는 마지막 버전. |
Visual C++ 4.2 | 4.2 | 4.2 | 1020 | 1996년 | 윈도우 3.x (Win32s) 개발을 지원하지 않음.[21] |
Visual C++ 5.0 | 5.0 | 5.0 | 1100 | 1997년 | MFC 4.21 포함 |
Visual C++ 6.0 | 6.0 | 6.0 | 1200 | 1998년 | MFC 6.0 포함. 윈도우 XP에서 디버깅 문제가 있었으나, "비주얼 C++ 6.0 프로세서 팩" 패치로 해결 가능.[29] |
Visual C++.NET 2002 | 2002 | 7.0 | 1300 | 2002년 | MFC 7.0 포함. 링크 시간 코드 생성 및 디버깅 런타임 검사, .NET 1.0, 비주얼 C# 및 Managed C++를 지원. |
Visual C++.NET 2003 | 2003 | 7.1 | 1310 | 2003년 | MFC 7.1 포함. .NET 1.1 지원. C99 "long long" 구문을 지원하는 최초의 버전. 윈도우 98이 공식적으로 지원되는 최저 버전. |
Visual C++ 2005 | 2005 | 8.0 | 1400 | 2005년 | MFC 8.0 포함. .NET 2.0 지원. OpenMP 도입. Windows 98 및 Windows Me를 대상으로 할 수 있는 마지막 버전.[31][32] |
Visual C++ 2008 | 2008 | 9.0 | 1500 | 2007년 | MFC 9.0 포함. .NET 3.5 지원. C++ TR1 라이브러리 확장 지원 추가. Windows 2000에서 작동하는 Win32 바이너리(프로그램)를 만들 수 있는 마지막 버전.[33][34] |
Visual C++ 2010 | 2010 | 10.0 | 1600 | 2010년 | C++0x를 부분적으로 지원. 병렬 컴퓨팅 라이브러리인 Parallel Patterns Library 추가. |
Visual C++ 2012 | 2012 | 11.0 | 1700 | 2012년 | 다국어 UI 지원. 윈도우 8, 윈도우 RT 전용 윈도우 스토어 앱 및 ARM 아키텍처용 앱 개발 지원. 업데이트 1 이후 윈도우 XP 지원. HLSL 컴파일 기능과 DirectX 그래픽 디버거 포함. C++11 도입. |
Visual C++ 2013 | 2013 | 12.0 | 1800 | 2013년 | C++11, C99 지원 강화. REST SDK 도입.[155] 윈도우 8.1용 윈도우 스토어 앱 개발 지원. C++/CX 추가. DirectX 11.1 디버깅 기능 IDE 포함. 인텔 Itanium 프로세서용 빌드 미지원. |
Visual C++ 2015 | 2015 | 14.0 | 1900 | 2015년 | C++11/C++14 지원 강화. |
Visual C++ 2017 | 2017 | 14.1 | 1910[133] | 2017년 | C++11/C++14/C++17 지원 강화. CMake 지원 추가.[134] Windows XP에서 작동하는 바이너리를 만들 수 있는 마지막 버전.[135]. |
Visual C++ 2019 | 2019 | 14.2 | 1920[133] | 2019년 | C++20 지원 강화. OpenMP 4.0 SIMD 벡터화의 실험적 지원.[136][137] |
Visual C++ 2022 | 2022 | 14.3 | 1930 | 2021년 | C++20/ 지원 강화. C++23 부분 지원.[141] |
2. 4. 1. 비주얼 C++ 2012
- 이 버전부터 다국어 UI를 지원하여, 언어팩을 설치해 원하는 언어로 변경할 수 있다.
- 윈도우 8, 윈도우 RT 전용 소프트웨어인 윈도우 스토어 앱을 만들 수 있다.
- ARM 아키텍처에서 구동할 수 있는 윈도 스토어 전용 앱을 만들 수 있다.
- 출시 초기에는 윈도우 7 이상에서만 구동할 수 있는 실행 파일만 만들 수 있었지만, 업데이트 1 이상으로 갱신하면 윈도우 XP에서도 구동할 수 있는 실행 파일을 만들 수 있다.
- 테스트 프로페셔녈 버전에는 컴파일러가 포함되어 있지 않다.
- HLSL 컴파일 기능과 DirectX 그래픽 디버거를 포함한다. (XP 지원 모드 제외)
- 컴파일 속도가 개선되었다.
- 표준 C++11을 도입했다.
2. 4. 2. 비주얼 C++ 2013
C++11, C99 지원이 강화되었고 REST SDK가 도입되었다.[155] 윈도우 8.1용 윈도우 스토어 앱을 만들 수 있다. 윈도 폰 8용 SDK와 에뮬레이터를 포함하여 앱을 만들 수 있다. C++/CX라는 새로운 규격이 추가되었다. DirectX SDK PIX의 DirectX 11.1 디버깅 기능을 IDE에 포함시켰다. 인텔 Itanium 프로세서용 빌드는 더 이상 지원하지 않는다.3. 언어 및 기능
Visual C++는 사실상 Windows의 표준 개발 환경이며, 최적화 성능이 매우 높다. Visual C++ 7.1 (.NET 2003)부터 표준 C++ 규격 준수도가 크게 개선되었다[75]。
Visual C++는 여러 버전이 존재하며, 과거에는 상위 버전에서만 최적화를 지원했으나, Visual C++ 2005부터는 기본적인 최적화가 Express를 포함한 모든 버전에서 가능하다. 그러나 2005년에 도입된 프로파일링 기반 최적화(PGO)는 상위 버전에서만 지원된다.
Visual C++ 8.0 (2005) 이후는 64비트 명령어 생성을 지원한다. 컴파일러는 자신이 동작하는 환경과 같은 네이티브 코드를 생성하거나, 32bit (x86) 환경에서 64bit (x64 또는 IA-64) 네이티브 코드를 출력하는 크로스 컴파일러를 포함한다. Visual C++ 11.0 (2012) 이후는 ARM 프로세서용 코드 생성도 지원하며, Visual C++ 14.1 (2017) 이후에는 ARM64 아키텍처의 네이티브 애플리케이션 개발도 지원한다 (Visual Studio 2017 v15.9 이상 필요)[76]。
"Visual"이라는 이름이 붙었지만, Visual Basic 등과 달리 RAD가 아니다. 기본적으로 Windows SDK (Windows API)나 MFC를 사용하여 코드 기반으로 프로그램을 작성한다. 단, 리소스 편집기를 사용하여 대화 상자 윈도우나 메뉴의 외관 디자인만 시각적으로 수행하는 것은 이전부터 가능했다.
Visual C++ 7.0 (.NET 2002) 이후에는 관리 확장 C++ 또는 C++/CLI를 사용하여 Windows Forms 애플리케이션을 개발하는 경우에 한하여, 폼 에디터를 이용한 Visual C#나 VB.NET과 같은 RAD 환경을 사용할 수 있다. 또한 Visual C++ 11.0 (2012) 이후에는, C++/CX를 사용하여 윈도우 스토어 앱을 개발하는 경우, XAML 에디터를 이용한 RAD 환경을 사용할 수 있다.
기존의 Win32/MFC 애플리케이션(DLL)에 CLI 지원을 추가하여 .NET Framework의 클래스 라이브러리를 함께 사용하는 하이브리드 개발도 가능하다.
DirectX를 사용하는 경우에 필요한 헤더 파일 등은 Windows SDK에 포함되어 있지만, DirectX API는 주로 Visual C++ 시리즈에서 사용되는 것을 전제로 개발되었기 때문에, 호환성이 매우 높다.
32비트/64비트용 Visual C++에서 C/C++의 long double형은 호환성을 위해 유지되지만, 80비트의 확장 배정밀도나 128비트의 사배정밀도는 지원하지 않는다.[117]
Visual C++ 2005 이후는 /arch 컴파일 옵션을 통해 컴파일러(옵티마이저)가 필요에 따라 부동 소수점 연산에 FPU 대신 SSE/SSE2를 사용한 코드를 출력할 수 있지만, x64처럼 모든 부동 소수점 연산 명령이 SSE2가 되는 것은 아니다.[118] Visual C++ 2010 이후는 AVX 명령 사용을, Visual C++ 2013 Update 2 이후는 AVX2 명령 사용을 지원한다.[118]
3. 1. 지원 언어
마이크로소프트 비주얼 C++는 C, C++, C++/CLI, C++/CX 소스 코드를 입력으로 받는다.C 언어 표준과 관련하여, 비주얼 C++ 9.0 (2008) SP1 시점에서는 ANSI C89 (ISO C90, ISO/IEC 9899:1990)를 지원하며[77], C99나 C11은 지원하지 않았다(
//
로 시작하는 주석이나 long long int 등은 언어 확장으로 지원). 비주얼 C++ 12.0 (2013)에서는 C99 함수의 대부분을 추가했지만 전부는 아니었다.[78] 비주얼 C++ 14.1 (2017)에서는 C99 프리프로세서의 부분적인 지원이 추가되었다(Visual Studio 2017 v15.8 이후)[79] . 비주얼 C++ 14.2 (2019)에서는 C11/C17의 필수 기능 지원이 추가되었다(Visual Studio 2019 v16.8 이후)[80] .C++ 언어 표준과 관련하여, 비주얼 C++ 9.0 (2008) SP1 시점에서는 C++98 (ISO/IEC 14882:1998) 표준을 지원한다[81] . 비주얼 C++ 10.0 (2010)에서는 auto, decltype, 람다식, rvalue reference (우측값 참조), static_assert, nullptr 등 C++11 표준에 추가된 기능을 일부 표준 제정에 앞서 구현했다[82] . 비주얼 C++ 11.0 (2012)에서는 Strongly typed enums, Forward declared enums, Standard-layout and trivial types, Range-based for-loop 등의 C++11 표준을 구현했다[83] . 비주얼 C++ 12.0 (2013)에서는 Initializer lists, Alias templates, Delegating constructors, Raw string literals 등의 C++11 표준을 추가 구현했다[84] . 비주얼 C++ 14.0 (2015)에서는 constexpr, Unicode string literals 등의 C++11 표준을 추가 구현했고, Binary literals 등의 C++14 표준을 일부 구현했다[85] . Visual Studio 2017 15.0의 비주얼 C++ 14.1 (2017)에서는 C++14 표준의 추가 기능을 모두 지원했지만, C++11 표준의 일부가 지원되지 않았다[86] . Visual Studio 2017 15.7에서 C++17 표준의 추가 기능을 모두 지원했지만, C++11 표준 중 C99 프리프로세서 ([http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm N1653])가 지원되지 않았다[87][88][89] . 또한,
__cplusplus
의 정의값은 기본적으로 199711L
로 되어 있지만, 컴파일 옵션 /Zc:__cplusplus
를 지정함으로써, C++ 언어 표준 모드 설정에 따라 201402L
등으로 변경된다[90] .3. 2. 컴파일러 확장
- '''인라인 어셈블러''': `_asm` 및 `__asm` 키워드를 사용한 기술. C++ 표준 규격에서 정해진 asm 문에는 대응하지 않는다. x64/IA64에서는 사용할 수 없으며, 별도의 어셈블러로 기술하거나 내장 함수로 대체한다.
- '''컴파일러 COM 대응''': `
#import ` 디렉티브 및 추가 클래스, 함수 등. - '''속성''': 마이크로소프트 인터페이스 정의 언어 MIDL의 속성을 직접 C++ 소스 코드에 기술하는 기능. 또한, 매니지드 확장 C++, C++/CLI, 및 C++/CX의 속성도 유사한 구문을 사용한다.
- '''OpenMP''': Visual C++ 2005부터 Open MP 2.0에 대응한다.[91] 2010까지는 Professional 이상의 에디션에서만 사용 가능했으나,[92][93][94] 2012에서는 Express를 포함한 모든 에디션에서 사용이 가능하게 되었다.[95]
- '''네이티브 C++에서의 C++/CLI 구문 사용''': for each[96] 및 override, abstract, sealed[97] 이 중 override는 C++11의 override와 유사한 구문이다. 또한, sealed는 C++11의 final 키워드에 해당한다 (sealed 자체는 더 거슬러 올라가면 마이크로소프트에서 나온 프로그래밍 언어 C#에서 유래되었다). Visual C++ 2012에서는 sealed, final 중 어느 것을 사용해도 되지만, 표준 C++ 클래스에는 final을, C++/CX의 ref 클래스 (Windows 런타임 클래스)에는 sealed를 사용하는 것이 권장된다.[98]
- '''Type Traits 대응''': `__is_pod` 키워드 등.[99]
- ''' .NET/WinRT 대응''': 후술한다.
- '''기타''': `__declspec`, 호출 규약의 지정, 프로퍼티 구문 (`__declspec(property)`), 구조적 예외 처리, `#pragma` 디렉티브, SAL 주석[100] 등.
3. 3. 라이브러리 확장
- 추가 CRT 함수: MS-DOS 시대부터 내려온 것, POSIX 호환, 보안 강화를 위한 것 등이 있다.
- 컴파일러 내장 함수: MMX, SSE, SSE2 및 기타 CPU 명령에 대응하는 것들이 있다.
- stdext 네임스페이스: hash_map, hash_set 등이 있다.
- msclr 네임스페이스: C++ 매니지드 확장 및 C++/CLI용 추가 라이브러리[101]
- STL/CLR: C++/CLI에서의 STL 스타일 라이브러리[102]
- 동시 실행 런타임 (Concurrency Runtime): C++11 기반의 병렬 처리 라이브러리[103]
- C++ AMP: GPU 등의 가속기를 사용한 병렬 처리 라이브러리 (언어 확장 포함)[104]
특히 Visual C++ 2005에서는 버퍼 오버플로우 및 멀티스레드에서의 안전성 향상을 위해 대폭적인 라이브러리 확장이 이루어졌다.[105][106] C 함수에는 strcpy에 대해 strcpy_s처럼 말미에 _s를 추가한 명칭의 것이 해당하며, 그 대부분은 ISO C 표준화 위원회에 TR 24731로 제안되었다. 또한 C++에서도 _s를 붙인 멤버 함수의 추가 (std::basic_istream::read에 대해 _Read_s처럼) 및 범위 검사 부착 이터레이터[107] 등의 추가가 이루어졌다.
Visual C++ 2008에 Service Pack 1 (SP1)을 적용하면, C++0x TR1 대응 라이브러리, MFC에서의 Visual Studio 스타일 스마트 도킹 윈도우 및 Office 2007 스타일 리본 인터페이스 작성을 위한 확장 패키지 (MFC Feature Pack)가 추가된다.[108] Visual C++ 2010에 SP1을 적용하면 Direct2D 및 Windows Animation Manager의 MFC용 래퍼 클래스가 추가된다.[109]
3. 4. .NET/WinRT 지원
마이크로소프트는 .NET 프레임워크 및 윈도우 런타임(WinRT)을 지원하기 위해 C++에 몇 가지 확장을 도입했다.- '''매니지드 확장 C++''' (Managed Extensions for C++, Managed C++): .NET Framework 애플리케이션 개발을 위해 C++을 CLS에 준수하도록 확장한 것이다[110]。Visual C++ .NET 2002부터 탑재되었다. 기존 C++는 '''네이티브 C++''' (혹은 '''언매니지드 C++''')라고 불린다[111]。매니지드 확장 C++와 네이티브 C++ 코드를 한 애플리케이션에 혼재[112]시켜, C++ 코드를 .NET으로 점진적으로 이관하거나, 다른 .NET 언어에서 C++ 라이브러리를 사용하거나, C++ 코드에서 .NET Framework 클래스 라이브러리를 활용하는 것이 가능했다(글루 언어). 이후 C++/CLI의 등장으로 사용이 권장되지 않게 되었다[113]。Visual C++ 2005-2013에서는 컴파일 옵션 `/clr:oldSyntax`를 통해 컴파일이 가능했지만[114], Visual C++ 2015에서 폐지되었다.
- '''C++/CLI''': 매니지드 확장 C++를 대체하는, CLS를 만족하는 C++ 기반 프로그래밍 언어다. Visual C++ 2005부터 탑재되었다. C++/CLI 환경에서 기존 C++는 '''네이티브'''로 표현된다.
- '''C++/CX''' (component extensions): 윈도우 스토어 앱(UWP 앱)에서 사용되는 WinRT 라이브러리를 효율적으로 사용하기 위해 C++11 표준을 기반으로 확장된 프로그래밍 언어다. Visual C++ 2012부터 탑재되었다. C++/CLI와 유사하지만, C++/CX는 네이티브 확장이다. 따라서 기존 네이티브 C/C++ 코드나 CRT 라이브러리를 거의 그대로 사용할 수 있지만, .NET Framework를 직접 다룰 수는 없다. C++/CLI와는 동일 소스 코드 내에서 공존할 수 없다. Windows 런타임 구성 요소(.winmd)를 통해 C#이나 VB.NET과 상호 운용할 수 있다.
- '''C++/WinRT''': Visual Studio 2015 Update 3부터 지원되는 확장 라이브러리로, C++/CX 언어 확장을 사용하지 않고 UWP 앱을 개발할 수 있게 해준다[115]。C++17 준수 컴파일러가 필요하다[116]。
3. 5. 기타 기능 및 특징
Windows의 사실상 표준 개발 환경이며, 최적화 성능이 매우 높다. Visual C++ 7.1 (.NET 2003)부터 표준 C++ 규격 준수도가 크게 개선되었다[75]。Visual C++는 여러 에디션이 존재하는데, 이전에는 상위 에디션에서만 최적화를 지원했지만, Visual C++ 2005부터는 기본적인 최적화가 Express를 포함한 모든 에디션에서 가능하다. 단, 2005년에 도입된 프로파일링 기반 최적화(Profile Guided Optimization, PGO)는 상위 에디션에서만 지원된다.Visual C++ 8.0 (2005) 이후는 64비트 명령어 생성을 지원한다. 컴파일러는 자신이 동작하는 환경과 같은 네이티브 코드를 생성하거나, 32bit (x86) 환경에서 64bit (x64 또는 IA-64) 네이티브 코드를 출력하는 크로스 컴파일러를 포함한다. Visual C++ 11.0 (2012) 이후는 ARM 프로세서용 코드 생성도 지원하며, Visual C++ 14.1 (2017) 이후에는 ARM64 아키텍처의 네이티브 애플리케이션 개발도 지원한다 (Visual Studio 2017 v15.9 이상 필요)[76]。
32비트/64비트용 Visual C++에서 C/C++의 long double형은 호환성을 위해 유지되지만, 80비트의 확장 배정밀도나 128비트의 사배정밀도는 지원하지 않는다.[117]
Visual C++ 2005 이후는 /arch 컴파일 옵션을 통해 컴파일러(옵티마이저)가 필요에 따라 부동 소수점 연산에 FPU 대신 SSE/SSE2를 사용한 코드를 출력할 수 있지만, x64처럼 모든 부동 소수점 연산 명령이 SSE2가 되는 것은 아니다.[118] Visual C++ 2010 이후는 AVX 명령 사용을, Visual C++ 2013 Update 2 이후는 AVX2 명령 사용을 지원한다.[118]
4. 호환성
마이크로소프트 비주얼 C++(VC++) 컴파일러는 다양한 버전의 C 런타임 라이브러리(CRT)를 제공하며,[59] 사용자는 자신의 코드에 맞는 라이브러리를 선택하여 컴파일할 수 있다. 그러나 동일한 프로그램 내에서 서로 다른 구성 요소(DLL, EXE)에 대해 서로 다른 CRT 버전을 사용하면 문제가 발생할 수 있다.[59] 예를 들어, 서로 다른 라이브러리를 사용하는 프로그램에서 예기치 않은 오류가 발생할 수 있다. 이러한 문제를 방지하려면 프로그램의 모든 구성 요소가 동일한 C 런타임을 사용해야 한다. 마이크로소프트는 잠재적인 문제를 최소화하기 위해 다중 스레드 동적 연결 라이브러리(/MD 또는 /MDd 컴파일러 옵션)를 사용할 것을 권장한다.[59]
VC++의 CRT는 컴파일 옵션에 따라 정적 연결 또는 동적 연결을 선택할 수 있다.[142] DLL 및 EXE에 VC 런타임을 동적 연결하면 애플리케이션 실행 파일의 크기를 줄일 수 있지만, 실행 환경에 VC 버전별 런타임 라이브러리 모듈(예: VC2010의 경우 msvcr100.dll 또는 msvcp100.dll)이 필요하다.[142] MFC, CLR, OpenMP, C++ AMP 등을 사용하는 경우 추가적인 런타임 라이브러리가 필요할 수 있다. 최종 사용자 환경을 위한 VC 런타임 라이브러리 재배포 가능 패키지가 제공되지만, 디버그 버전 라이브러리는 포함되지 않는다. 일부 Windows 버전에는 특정 버전의 VC 런타임 서브셋이 시스템 구성 요소로 포함되어 있기도 하다.
VC 런타임 라이브러리는 버전마다 CRT 객체의 메모리 관리를 다르게 처리한다. 따라서 서로 다른 버전의 VC 간에 DLL 경계를 넘어 CRT 객체의 수명을 관리하는 것은 불가능하다. 예를 들어, 이전 버전의 VC로 생성된 DLL에서 malloc/new로 할당한 메모리를 최신 버전의 VC로 생성된 애플리케이션에서 free/delete하는 것은 힙 손상이나 정의되지 않은 동작을 유발할 수 있다.[143] 메모리 할당 및 해제는 각 모듈 내에서 처리되어야 하며, 모듈 외부에 기능을 공개하려면 DLL 함수를 통해 래핑해야 한다.
VC2015부터는 Universal CRT가 도입되었고, VC2017 및 VC2019는 VC2015와 호환성을 유지하여 특정 조건 하에서는 DLL 경계를 넘어 CRT 객체의 수명 관리가 가능해졌다.[144][145][146][147] Windows 10에서는 Universal CRT가 기본 시스템 구성 요소이지만, 이전 버전의 Windows에서는 Windows 업데이트나 재배포 가능 패키지를 통해 설치해야 한다.[148][149][150][151][152][153]
마이크로소프트 CRT는 POSIX 인터페이스의 상당 부분을 구현하지만, Visual C++ 컴파일러는 기본적으로 이러한 함수 사용 시 경고를 표시한다. 이는 C 및 C++ 표준에서 구현 정의 인터페이스 앞에 밑줄 접두사를 요구하기 때문이다.[60] 그러나 POSIX를 준수하는 시스템은 밑줄 있는 이름을 허용하지 않으므로, 경고를 끄는 것이 이식성을 높이는 방법일 수 있다.
마이크로소프트 비주얼 C++는 C 프로그래밍 언어용 통합 개발 환경(IDE)으로 시작했지만, 오랫동안 C 언어에 대한 지원은 1989년 C 표준 초판에만 머물렀고, C99 개정판은 지원하지 않았다. 2011년에도 C99 지원 계획은 없었다.[61]
비주얼 C++ 2013부터 C 모드에서 지정된 초기화, 복합 리터럴, `_Bool` 유형 등 다양한 C99 기능을 지원하기 시작했지만,[62] 여전히 완전하지는 않았다.[63] 비주얼 C++ 2015에서는 C99 표준 라이브러리에 대한 완전한 지원을 포함하여 C99 지원이 개선되었지만, 컴파일러에서 아직 지원하지 않는 C99 언어 기능이 필요한 경우는 예외였다.[64]
C11 개정판의 대부분은 비주얼 C++ 2017에서도 지원되지 않았다.[65] 예를 들어, `_Generic` 키워드를 통한 일반 선택은 컴파일러에서 지원되지 않아 구문 오류가 발생했다.[66]
2018년에 전처리기가 C11을 고려하여 개편되었고,[67] 2020년 9월에는 MSVC 버전 16.8에서 C11 및 C17 표준 지원이 제공될 것이라고 발표되었다.[69] 여기에는 선택적 기능은 포함되지 않았지만, 마이크로소프트는 추후 원자성(atomics)과 스레드에 대한 지원을 추가할 계획이라고 밝혔다. 버전 17.5에서는 원자성에 대한 부분적(원자적 잠금 누락)이고 실험적인(컴파일러 플래그 `/experimental:c11atomics` 사용) 지원이 추가되었으며,[70] 버전 17.8에서는 컴파일러 플래그 없이 스레드에 대한 지원이 추가되었다.[71][72]
4. 1. ABI 호환성
마이크로소프트 비주얼 C++ 컴파일러의 ABI는 역사적으로 주요 컴파일러 릴리스 간에 변경되어 왔다.[54] 특히 STL 컨테이너의 경우, 컨테이너 크기가 컴파일러 릴리스 간에 크게 달라졌다.[55] 따라서 마이크로소프트는 다른 컴파일러 버전을 사용하여 컴파일된 클라이언트 코드를 활성화하려는 경우 모듈 경계에서 C++ 인터페이스를 사용하지 않도록 권장한다. C++ 대신 마이크로소프트는 컴파일러 릴리스 간에 안정적인 ABI를 갖도록 설계된 C[56] 또는 COM[57] 인터페이스를 사용할 것을 권장한다.모든 14.x MSVC 릴리스는 안정적인 ABI를 가지며,[58] 이러한 버전으로 빌드된 바이너리는 다음과 같은 제한 사항을 고려하여 순방향 호환 방식으로 혼합될 수 있다.
- 사용된 도구 집합 버전은 연결된 모든 바이너리를 빌드하는 데 사용된 최고 도구 집합 버전과 같거나 높아야 한다.
- MSVC 재배포 가능 버전은 모든 응용 프로그램 구성 요소에서 사용되는 도구 집합 버전과 같거나 높아야 한다.
- `/GL`(전체 프로그램 최적화)로 컴파일된 정적 라이브러리 또는 개체 파일은 버전 간에 바이너리 호환되지 않으며 정확히 동일한 도구 집합을 사용해야 한다.
4. 2. C 런타임 라이브러리
마이크로소프트 비주얼 C++(VC)는 다양한 버전의 C 런타임 라이브러리(CRT)를 제공한다.[59] 이는 사용자가 사용 가능한 모든 라이브러리로 코드를 컴파일할 수 있게 해주지만, 동일한 프로그램 내에서 서로 다른 구성 요소(DLL, EXE)를 사용할 때 문제를 야기할 수 있다. 예를 들어, 서로 다른 라이브러리를 사용하는 프로그램에서 문제가 발생할 수 있다. 이러한 문제를 방지하려면, 프로그램의 모든 구성 요소에 대해 동일한 C 런타임을 사용해야 한다. 마이크로소프트는 가능한 문제를 피하기 위해 다중 스레드 동적 연결 라이브러리(/MD 또는 /MDd 컴파일러 옵션)를 사용할 것을 권장한다.[59]VC의 CRT는 컴파일 옵션에 따라 정적 연결 또는 동적 연결을 선택할 수 있다.[142] DLL 및 EXE에 VC 런타임을 동적 연결하는 경우, DLL/EXE 자체의 파일 크기를 줄일 수 있다는 장점이 있지만, 애플리케이션 실행에는 VC 버전별 런타임 라이브러리 모듈이 실행 환경에 필요하다(예: VC2010의 경우 msvcr100.dll 또는 msvcp100.dll 등). MFC/CLR/OpenMP/C++ AMP를 이용해 작성된 DLL/EXE는 각각의 런타임 라이브러리가 추가로 필요하다. 최종 사용자 환경을 위한 VC 런타임 라이브러리의 재배포 가능 패키지가 설치 프로그램 형태로 제공되지만, 이 설치 프로그램에는 디버그 버전의 라이브러리는 포함되지 않는다. Windows 버전에 따라 특정 버전의 VC 런타임 서브셋이 시스템 구성 요소로 사전 설치되어 있기도 하다.
VC 런타임 라이브러리는 버전마다 CRT 객체의 메모리 관리가 이루어진다. 따라서 서로 다른 버전의 VC 간에 DLL 경계를 넘어 CRT 객체의 수명을 관리하는 것은 불가능하다. 예를 들어 이전 버전의 VC로 생성된 DLL 내에서 malloc/new로 생성된 객체를 최신 버전의 VC로 생성된 애플리케이션에서 free/delete하거나, 반대로 최신 VC로 생성된 DLL 내에서 malloc/new로 생성된 객체를 이전 VC로 생성된 애플리케이션에서 free/delete하는 것은 힙 손상 등의 런타임 오류나 정의되지 않은 동작을 야기할 수 있다.[143] 메모리 할당 및 해제는 모듈마다 닫혀 있어야 하며, 모듈 외부에 할당 및 해제 처리를 공개하려면 DLL 함수를 통해 래핑해야 한다.
VC2015에서는 Universal CRT가 도입되었고, VC2017 및 VC2019에서는 런타임에 파괴적인 변경이 없어 VC2015와 호환성이 있기 때문에, 일정 조건이 충족되면 DLL 경계를 넘어 CRT 객체의 수명을 관리할 수 있다.[144][145][146][147] Windows 10의 경우 Universal CRT는 시스템 구성 요소로 기본 설치되어 있지만, 이전 버전의 Windows에서는 Windows 업데이트나 재배포 가능 패키지를 이용한 시스템 디렉터리 설치(집중 배치) 또는 애플리케이션별 로컬 배치 등의 방법을 사용해야 한다.[148][149][150][151][152][153]
마이크로소프트의 CRT는 POSIX 인터페이스의 상당 부분을 구현하지만, Visual C++ 컴파일러는 기본적으로 이러한 함수를 사용할 때마다 경고를 표시한다. 이는 C 및 C++ 표준에서 구현 정의 인터페이스 앞에 밑줄 접두사를 요구하기 때문에 이러한 함수의 사용이 표준이 아니기 때문이다.[60] 그러나 실제로 POSIX를 준수하는 시스템은 이러한 밑줄이 있는 이름을 허용하지 않으므로, 경고를 끄는 것이 더 이식성이 좋다.
마이크로소프트 비주얼 C++는 C 프로그래밍 언어용 통합 개발 환경(IDE)으로 시작되었지만, 오랫동안 해당 언어에 대한 컴파일러 지원은 1989년 C 표준 초판에만 부합했고, 표준의 C99 개정판에는 부합하지 않았다. C99가 발표된 지 10년이 넘은 2011년에도 C99를 지원할 계획은 없었다.[61]
비주얼 C++ 2013은 C 모드에서 다양한 C99 기능을 지원하기 시작했지만(지정된 초기화, 복합 리터럴 및 `_Bool` 유형 포함),[62] 여전히 완전하지는 않았다.[63] 비주얼 C++ 2015는 C99 표준 라이브러리에 대한 완전한 지원을 포함하여 C99 지원을 더욱 개선했지만, 컴파일러에서 아직 지원하지 않는 C99 언어 기능이 필요한 기능은 예외였다.[64]
C11 개정판 대부분의 변경 사항은 비주얼 C++ 2017에서도 여전히 지원되지 않았다.[65] 예를 들어, `_Generic` 키워드를 통한 일반 선택은 컴파일러에서 지원되지 않아 구문 오류가 발생한다.[66]
전처리기(preprocessor)는 2018년에 C11을 염두에 두고 개편되었다.[67] 2020년 9월, 마이크로소프트는 MSVC 버전 16.8에서 C11 및 C17 표준 지원이 제공될 것이라고 발표했다.[69] 여기에는 선택적 기능은 포함되지 않았지만, 마이크로소프트는 나중에 원자성(atomics)과 스레드에 대한 지원을 추가할 계획이라고 밝혔다. 버전 17.5에서는 원자성에 대한 부분적(원자적 잠금이 누락되었기 때문)이고 실험적인(컴파일러 플래그 `/experimental:c11atomics` 뒤에 숨겨짐을 의미) 지원이 추가되었으며,[70] 버전 17.8에서는 컴파일러 플래그 없이 스레드에 대한 지원이 추가되었다.[71][72]
5. 무료 버전
Visual C++는 에디션에 따라 지원하는 기능에 차이가 있지만, 프로그래밍 초보자나 업그레이드를 고려하는 사용자를 위해 마이크로소프트에서 Windows용 클래스 라이브러리 등이 부속되지 않은 무료 버전을 공개하고 있다. 무료 버전이라고 해도, 버전 업 시마다 표준 지원되는 기능이 추가되어, VC 2005 이후에는 IDE의 IntelliSense 및 디버거 등의 기본 기능은 Standard 에디션 이상의 유료 버전과 다르지 않아, 간단한 애플리케이션이나 라이브러리를 작성하는 데에는 충분하다고 할 수 있다. Express 에디션의 제공은 2013 버전까지이며, 이후에는 Community 에디션으로 통합될 예정이었지만[119], 이후 철회되어 Visual Studio 2015에서도 Express 에디션이 제공되었다[120]。
다음은 무료 버전의 종류와 그 특징이다.
버전 | 설명 |
---|---|
Visual C++ ToolKit 2003 | 2003년에 프로페셔널 버전과 동등한 최적화 기능을 가진 컴파일러 (IDE는 포함되지 않음)가 무료로 제공되었다. 단, 그 이전부터 .NET Framework SDK에 스탠다드 버전 상당의 컴파일러 (최적화 기능 없음)가 부속되어 있었다. Visual C++ 2005 Express Edition의 공개에 따라, 현재는 공개가 종료되었다. |
Visual C++ 2005 Express Edition | 2005년 12월부터 IDE가 포함되어 무료로 공개되었으며, 2009년 3월 31일에 배포가 종료되었다. 마이크로소프트가 IDE 제품의 정식 버전을 무료로 공개한 것은 eMbedded Visual Tools에 이어 이것이 두 번째이다. MFC와 ATL은 부속되지 않는다. Windows API를 사용한 프로그램을 작성하려면 별도로 Windows SDK를 설치해야 한다. |
Visual C++ 2008 Express Edition | 2007년 12월 18일 공개. ATL과 MFC가 부속되지 않는 점은 Visual C++ 2005 Express Edition과 같지만, Windows SDK가 표준으로 함께 제공되어, Win32 애플리케이션 개발에 필요한 Windows SDK를 별도로 준비할 필요가 없어졌다. |
Microsoft Visual C++ Compiler for Python 2.7 | Windows판 Python의 확장 모듈 바이너리 패키지는 Python의 버전과 C 런타임 라이브러리의 버전에 강한 의존 관계가 있으며, 이에 대응하기 위해 배포되고 있다. VC++ 2008의 컴파일러에 해당하며, IDE는 부속되지 않는다. |
Visual C++ 2010 Express | 2010년 4월 28일 공개. Visual C++ 솔루션 및 프로젝트가 XML 기반의 MSBuild를 사용하여 빌드하게 되어, 다른 Visual Studio 언어에서 사용되는 빌드 시스템과 같아졌다. |
Visual Studio Express 2012 for Windows 8 Visual Studio Express 2012 for Windows Desktop | 2012년 9월 12일 공개. 이 버전에서는 Visual C++ 단독 제품은 없어지고 C#, VB.NET과 함께 설치된다. |
Visual Studio Express 2013 for Windows Visual Studio Express 2013 for Windows Desktop | 2013년 10월 17일 공개. |
Visual Studio Community 2013 | 2014년 11월 13일 공개[121]。Express 에디션과 비교하여 이용 약관은 엄격해졌지만, 기능적으로는 Professional 버전과 동일하다. 지금까지 유료 버전에서만 사용할 수 있었던 MFC, ATL도 부속된다. |
Visual Studio Express 2015 for Windows Visual Studio Express 2015 for Desktop Visual Studio Community 2015 | 2015년 7월 20일 공개[122]。 |
Visual C++ Build Tools 2015 | VC++ 2015의 컴파일러에 해당한다. IDE는 부속되지 않지만 ATL과 MFC가 부속되어 있다. |
Visual Studio Community 2017 Visual C++ Build Tools 2017 Visual Studio Express 2017 for Windows Desktop Build Tools for Visual Studio 2019 |
그 외에도 버전 7.1까지의 Windows SDK (구 Platform SDK)와 버전 7.1까지의 Windows Driver Kit에도 Visual C++ 컴파일러가 부속되어 있었다. 또한 버전 10 1511의 Windows Driver Kit부터는 Enterprise Windows Driver Kit라고 불리는 컴파일러 등이 부속되는 버전의 WDK의 배포가 재개되었다.
Visual C++ Build Tools는 빌드 서버나 지속적 통합 (CI) 등, GUI를 사용하지 않고 배치 처리적으로 빌드를 수행하는 환경에서의 사용을 의도한 것이다. 통합 개발 환경을 포함하는 통상의 Visual Studio를 보완하는 제품이라는 위치이며, Visual Studio의 정규 사용자가 사용하는 것을 전제로 하고 있다.
6. 현재의 제품
현재 사용 가능한 비주얼 C++ 제품군은 다음과 같다.
- 마이크로소프트 비주얼 C++ 2017 익스프레스 에디션
- 마이크로소프트 비주얼 스튜디오 2017 엔터프라이즈
- 마이크로소프트 비주얼 스튜디오 2017 프로페셔널
- 마이크로소프트 비주얼 스튜디오 2017 커뮤니티
비주얼 C++은 비주얼 스튜디오에 포함되어 있다.
비주얼 C++은 기본적으로 비주얼 스튜디오 패키지를 구매하거나 MSDN 제품 구독을 통해 사용권을 얻는 상용 프로그램이다. 하지만 익스프레스 에디션과 커뮤니티 에디션은 MSDN 또는 공식 웹사이트에서 누구나 무료로 내려받아 설치하고 사용할 수 있다.
비주얼 C++은 사실상 Windows 표준 개발 환경이며, 최적화 성능이 매우 높다. Visual C++ 7.1 (.NET 2003)부터 표준 C++ 규격 준수도가 크게 개선되었다[75]。 이전에는 상위 에디션에서만 최적화를 지원했지만, Visual C++ 2005부터는 익스프레스 에디션을 포함한 모든 에디션에서 기본적인 최적화를 할 수 있게 되었다. 단, 2005년에 도입된 프로파일링 기반 최적화(Profile Guided Optimization, PGO)는 상위 에디션에서만 지원된다.
Visual C++ 2005 이후, Visual Basic, Visual C# 등 다른 개발 언어와 통합된 Visual Studio 패키지 형태로 판매되고 있다. Visual C++ .NET 2003까지는 언어별 제품으로 판매되었지만, 2005년부터는 통합 패키지 형태로 판매되고 있으며, Visual Studio 패키지에서 기능을 제한한 무료 버전인 Visual C++ Express Edition을 내려받을 수 있다.
7. 평가
BYTE는 1989년 2월, 마이크로소프트 C 5.1의 OS/2 지원, 대화식 개발을 위한 QuickC, CodeView 디버거를 "훌륭하다"고 평가했다. Watcom C가 약간 더 빠른 코드를 생성했지만, 이 잡지는 개발자들이 "마이크로소프트의 더 친숙하고 강력한 도구를 여전히 선호할 수 있다"고 언급했다.[74]
참조
[1]
뉴스
Visual C++ adds Windows support
https://books.google[...]
1993-02-22
[2]
웹사이트
The Programming Languages Beacon, v10.0
http://www.lextrait.[...]
2010-03-14
[3]
웹사이트
Do I need these Microsoft Visual C++ redistributables?
http://ask-leo.com/d[...]
2012-11-18
[4]
서적
Computer Language - Issue 06 (1985-02)(CL Publications)(US)
http://archive.org/d[...]
1985-02
[5]
간행물
Software Reviews: Expert team analyzes 21 C compilers
https://archive.org/[...]
2020-06-05
[6]
웹사이트
Optimizing With Microsoft C 6.0
http://www.drdobbs.c[...]
1990-08-01
[7]
간행물
Microsoft C/C++
https://books.google[...]
Ziff Davis
2023-12-21
[8]
간행물
News/Software Pipeline Announced
https://books.google[...]
InfoWorld Media Group
2023-12-21
[9]
웹사이트
Retrieved from http://support.microsoft.com/kb/196831.
[10]
뉴스
Visual C++ is a strong development tool
https://books.google[...]
1993-06-21
[11]
뉴스
Rival DOS Extenders debut at show
https://books.google[...]
1993-03-01
[12]
뉴스
Visual C++ 1.5 integrates OLE, ODBC
https://books.google[...]
1993-11-08
[13]
뉴스
Microsoft set to prerelease 32-bit Visual C++
https://books.google[...]
1993-07-19
[14]
뉴스
C++ IDEs evolve
https://books.google[...]
1994-04-04
[15]
웹사이트
Microsoft Visual C++ Strategy
http://accu.org/inde[...]
[16]
웹사이트
Generalized Evangelism Timeline
http://www.iowaconsu[...]
Microsoft Corporation
2024-01-27
[17]
서적
Cross-Platform Development Using Visual C++
https://archive.org/[...]
M&T Books
2024-01-27
[18]
웹사이트
Obsolete Products
http://support.micro[...]
[19]
서적
Visual C++ 4.0 unleashed
https://books.google[...]
SAMS Publishing
2013-07-26
[20]
웹사이트
History of Visual Studio (Part 3)
http://blogs.msdn.co[...]
2021-08-06
[21]
웹사이트
Major Changes from Visual C++ 4.0 to 4.2
http://msdn.microsof[...]
2018-04-18
[22]
웹사이트
Major Changes from Visual C++ 4.2 to 5.0
http://msdn.microsof[...]
[23]
웹사이트
Microsoft Visual C++ 5.0 Learning Edition
http://www.microsoft[...]
[24]
웹사이트
Microsoft Visual C++ 5.0 Professional Edition
http://www.microsoft[...]
[25]
웹사이트
Microsoft Visual C++ 5.0 Enterprise Edition
http://www.microsoft[...]
[26]
웹사이트
Microsoft Visual C++ 5.0 RISC Edition
http://www.microsoft[...]
[27]
뉴스
Criminal Complaint
https://www.justice.[...]
United States Department of Justice
2018-06-08
[28]
웹사이트
Major Changes from Visual C++ 5.0 to 6.0
http://msdn.microsof[...]
[29]
웹사이트
This page stresses that Users must also be running Windows 98, Windows NT 4.0, or Windows 2000.
[30]
서적
Programming Microsoft Windows CE .NET, Third Edition
https://archive.toda[...]
Microsoft Press
2013-02-11
[31]
웹사이트
How to: Modify WINVER and _WIN32_WINNT
http://msdn.microsof[...]
[32]
웹사이트
Breaking Changes
http://msdn.microsof[...]
[33]
웹사이트
Windows Platforms (CRT)
http://msdn.microsof[...]
[34]
웹사이트
Visual C++ 2008 Breaking Changes
http://msdn.microsof[...]
2023-05-25
[35]
웹사이트
IntelliSense, part 2: The Future
http://blogs.msdn.co[...]
2008-03-12
[36]
웹사이트
Why IntelliSense is not supported for C++/CLI in Visual Studio 2010
http://blogs.msdn.co[...]
2011-03-13
[37]
웹사이트
Rebuilding Intellisense
http://blogs.msdn.co[...]
2009-05-27
[38]
웹사이트
Visual C++ Code Generation in Visual Studio 2010
http://blogs.msdn.co[...]
[39]
웹사이트
C++0x Core Language Features In VC10: The Table
http://blogs.msdn.co[...]
[40]
웹사이트
Stephan T. Lavavej: Everything you ever wanted to know about nullptr
http://channel9.msdn[...]
[41]
웹사이트
Released: Windows SDK for Windows 7 and .NET Framework 4
http://blogs.msdn.co[...]
[42]
문서
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
http://support.micro[...]
[43]
웹사이트
What's New for Visual C++ in Visual Studio 2012
https://msdn.microso[...]
Microsoft
2012-11-29
[44]
웹사이트
What's New for Visual C++ in Visual Studio 2013
https://msdn.microso[...]
Microsoft
2015-04-28
[45]
웹사이트
Visual Studio 2015 RTM Now Available
http://blogs.msdn.co[...]
Microsoft
2015-07-20
[46]
웹사이트
C++11/14/17 Features In VS 2015 RTM
http://blogs.msdn.co[...]
Microsoft
2015-06-19
[47]
뉴스
Reviewing Microsoft's Automatic Insertion of Telemetry into C++ Binaries
https://www.infoq.co[...]
[48]
웹사이트
Visual Studio adding telemetry function calls to binary? • /r/cpp
https://www.reddit.c[...]
2016-05-07
[49]
웹사이트
Announcing Visual Studio 2017 General Availability… and more
https://devblogs.mic[...]
Microsoft
2017-03-07
[50]
웹사이트
Join us April 2nd for the Launch of Visual Studio 2019!
https://devblogs.mic[...]
Microsoft
2019-02-14
[51]
웹사이트
Visual Studio 2022 now available
https://devblogs.mic[...]
Microsoft
2021-11-08
[52]
웹사이트
Pre-defined Compiler Macros / Wiki / Compilers
https://dev.to/yumet[...]
2018-05-22
[53]
웹사이트
Predefined Macros / Microsoft Learn
https://learn.micros[...]
2022-08-08
[54]
문서
Breaking Changes in Visual C++
http://msdn.microsof[...]
Microsoft MSDN
[55]
문서
Containers (Modern C++)
http://msdn.microsof[...]
Microsoft MSDN
[56]
문서
Portability At ABI Boundaries (Modern C++)
http://msdn.microsof[...]
Microsoft MSDN
[57]
문서
Binary compatibility across Visual C++ versions
http://social.msdn.m[...]
Microsoft forum
[58]
문서
C++ binary compatibility between Visual Studio 2015, 2017, and 2019
https://docs.microso[...]
docs.microsoft.com
[59]
문서
C Run-Time Libraries
http://msdn.microsof[...]
[60]
웹사이트
Compatibility
https://docs.microso[...]
2022-10-26
[61]
웹사이트
C99 support
https://connect.micr[...]
2015-09-21
[62]
웹사이트
What's New for Visual C++ in Visual Studio 2013
https://msdn.microso[...]
Microsoft
2015-04-28
[63]
웹사이트
C99 library support in Visual Studio 2013
http://blogs.msdn.co[...]
Microsoft
2013-07-19
[64]
웹사이트
What's New for Visual C++ in Visual Studio 2015
https://msdn.microso[...]
Microsoft
2018-01-03
[65]
웹사이트
Walkthrough: Compile a C program on the command line
https://docs.microso[...]
Microsoft
2022-05-10
[66]
웹사이트
MSVC 2017 does not support _Generic (type generic macros) in C
https://developercom[...]
[67]
웹사이트
MSVC Preprocessor Progress towards Conformance
https://devblogs.mic[...]
Microsoft
2018-07-06
[68]
웹사이트
C++20 Features and Fixes
https://www.reddit.c[...]
2020-07-03
[69]
웹사이트
C11 and C17 Standard Support Arriving in MSVC
https://devblogs.mic[...]
2020-09-14
[70]
웹사이트
C11 Atomics in Visual Studio 2022 version 17.5 Preview 2
https://devblogs.mic[...]
2022-12-13
[71]
웹사이트
C11 Threads in Visual Studio 2022 version 17.8 Preview 2
https://devblogs.mic[...]
2023-09-26
[72]
웹사이트
Visual Studio 17.8 now available!
https://devblogs.mic[...]
Adrian Murphy
2023-11-14
[73]
웹사이트
Two-phase name lookup support comes to MSVC
https://devblogs.mic[...]
2017-09-11
[74]
간행물
Smoothing Out C
https://archive.org/[...]
Steven Apiki, Jon Udell
1989-02-01
[75]
문서
Visual C++ What's New 2003 through 2015
https://docs.microso[...]
Microsoft Docs
[76]
뉴스
Microsoft、「Visual Studio 2017 15.9」でArm64アプリ開発を正式サポート:64bit Armアプリの作成が容易に - @IT
https://www.atmarkit[...]
[77]
문서
ANSI Conformance
https://docs.microso[...]
Microsoft Docs
[78]
블로그
C99 library support in Visual Studio 2013 | C++ Team Blog
https://devblogs.mic[...]
[79]
문서
Microsoft C++ language and standard library conformance table | Microsoft Docs
https://docs.microso[...]
[80]
블로그
C11 and C17 Standard Support Arriving in MSVC | C++ Team Blog
https://devblogs.mic[...]
[81]
웹사이트
標準 C++ プログラムの作成 (C++)
http://msdn.microsof[...]
マイクロソフト
2007-11-01
[82]
문서
Visual C++ 2010 の新機能
http://msdn.microsof[...]
[83]
블로그
C++11 Features in Visual C++ 11
http://blogs.msdn.co[...]
[84]
문서
Support For C++11 Features (Modern C++)
http://msdn.microsof[...]
[85]
블로그
C++11/14/17 Features In VS 2015 RTM - Visual C++ Team Blog - Site Home - MSDN Blogs
http://blogs.msdn.co[...]
[86]
문서
Visual Studio 2017 リリース ノート
https://www.visualst[...]
[87]
문서
Visual C++ Language Conformance | Microsoft Docs
https://docs.microso[...]
[88]
블로그
Announcing: MSVC Conforms to the C++ Standard | Visual C++ Team Blog
https://blogs.msdn.m[...]
[89]
문서
コンパイラの実装状況 - cpprefjp C++日本語リファレンス
https://cpprefjp.git[...]
[90]
블로그
MSVC now correctly reports __cplusplus | Visual C++ Team Blog
https://blogs.msdn.m[...]
[91]
문서
Visual C++ の OpenMP
http://msdn2.microso[...]
[92]
문서
Visual C++ Editions (2005)
http://msdn.microsof[...]
[93]
문서
Visual C++ Editions (2008)
http://msdn.microsof[...]
[94]
문서
Visual C++ Editions (2010)
http://msdn.microsof[...]
[95]
문서
Visual C++ Tools and Templates in Visual Studio Editions
http://msdn.microsof[...]
[96]
문서
How to: Iterate Over STL Collection with for each
http://msdn2.microso[...]
[97]
문서
How to: Declare Override Specifiers in Native Compilations
http://msdn2.microso[...]
[98]
문서
sealed (C++ Component Extensions)
https://msdn.microso[...]
[99]
문서
Compiler Support for Type Traits
http://msdn.microsof[...]
[100]
문서
SAL注釈
http://msdn.microsof[...]
[101]
문서
msclr 名前空間
https://msdn.microso[...]
[102]
문서
STL/CLR ライブラリ リファレンス
https://msdn.microso[...]
[103]
문서
同時実行ランタイム
https://msdn.microso[...]
[104]
문서
C++ AMP (C++ Accelerated Massive Parallelism)
https://msdn.microso[...]
[105]
문서
CRTのセキュリティ強化
http://msdn.microsof[...]
[106]
문서
Safe Libraries: Standard C++ Library
http://msdn.microsof[...]
[107]
문서
Checked Iterators
http://msdn.microsof[...]
[108]
문서
Visual C++ 2008 用の MFC Feature Pack
http://msdn.microsof[...]
[109]
문서
Visual Studio 2010 SP1 用の MFC の追加
https://msdn.microso[...]
[110]
문서
C++ マネージ拡張プログラミング (C++)
https://msdn.microso[...]
[111]
문서
ネイティブ C++ アプリケーションの再頒布
https://msdn.microso[...]
[112]
문서
混在 (ネイティブおよびマネージ) アセンブリ
https://msdn.microso[...]
[113]
문서
/clr (共通言語ランタイムのコンパイル)
https://msdn.microso[...]
[114]
문서
/clr (共通言語ランタイムのコンパイル) (C++)
https://msdn.microso[...]
[115]
문서
C++ - C++/WinRT の紹介
https://msdn.microso[...]
[116]
문서
Introduction to C++/WinRT - Windows UWP applications | Microsoft Docs
https://docs.microso[...]
[117]
문서
Long Double 型
http://msdn.microsof[...]
[118]
문서
/arch (x86) | Microsoft Docs
https://docs.microso[...]
[119]
뉴스
Microsoft、“Professional”相当の無償版「Visual Studio Community 2013」を公開 - 窓の杜
https://forest.watch[...]
窓の杜
[120]
문서
Visual Studio 2015 の製品ラインアップを発表 - Visual Studio 日本チーム ブログ - Site Home - MSDN Blogs
http://blogs.msdn.co[...]
[121]
뉴스
MSが「Visual Studio Community」を発表、無償でAndroid/iOSアプリも開発可能:ITpro
https://xtech.nikkei[...]
ITpro
[122]
뉴스
Microsoft、統合開発環境「Visual Studio 2015」を正式公開 - 窓の杜
https://forest.watch[...]
窓の杜
[123]
문서
定義済みマクロ
https://msdn.microso[...]
[124]
문서
Visual C++ 2003 ~ 2015 の新機能 | Microsoft Docs
https://docs.microso[...]
[125]
웹사이트
Application statically linked with Visual C++ 2010 C/C++ runtime fails to launch with error ‘The procedure entry point EncodePointer could not be located in the dynamic link library KERNEL32.dll’.
http://support.micro[...]
マイクロソフト
2009-10-29
[126]
웹사이트
Breaking Changes
http://msdn.microsof[...]
2009-12-26
[127]
웹사이트
Windows Server 2008 R2 to Phase Out Itanium
http://blogs.technet[...]
2010-05-11
[128]
문서
コンパイラの判断によって32bit版アプリケーションでも SSE2 命令が使われる可能性がある。
[129]
문서
Breaking Changes in Visual C++ | Microsoft Docs
https://docs.microso[...]
[130]
문서
浮動小数点の移行に関する問題 | Microsoft Docs
https://docs.microso[...]
[131]
문서
Unicode とマルチバイト文字セット (MBCS: Multibyte Character Set) のサポート
http://msdn.microsof[...]
[132]
문서
Visual Studio 2015 における Visual C++ の新機能
https://msdn.microso[...]
[133]
문서
Visual Studioのアップデートに伴い、_MSC_VER
の最下位の桁も更新されるようになっている。
[134]
문서
Visual Studio 2017 (バージョン 15.0) リリース ノート
https://www.visualst[...]
[135]
문서
Visual Studio 2019 プレビューでの非推奨の C++ 機能 | Microsoft Docs
https://docs.microso[...]
[136]
문서
SIMD Extension to C++ OpenMP in Visual Studio | C++ Team Blog
https://devblogs.mic[...]
[137]
문서
/openmp (Enable OpenMP Support) | Microsoft Docs
https://docs.microso[...]
[138]
문서
Visual Studio 2019 リリース ノート | Microsoft Docs
https://docs.microso[...]
[139]
문서
New, experimental code analysis features in Visual Studio 2017 15.8 Preview 3 | C++ Team Blog
https://devblogs.mic[...]
[140]
문서
In-editor code analysis in Visual Studio 2019 Preview 2 | C++ Team Blog
https://devblogs.mic[...]
[141]
웹사이트
What's New for Visual C++ in Visual Studio?
https://learn.micros[...]
[142]
웹사이트
"/MD, -MT, -LD (Use Run-Time Library) | Microsoft Docs"
https://docs.microso[...]
[143]
웹사이트
"Potential Errors Passing CRT Objects Across DLL Boundaries | Microsoft Docs"
https://docs.microso[...]
[144]
웹사이트
"C++ Binary Compatibility between Visual Studio 2015 and Visual Studio 2019 | Microsoft Docs"
https://docs.microso[...]
[145]
웹사이트
"Visual C++ change history 2003 - 2015 | Microsoft Docs"
https://docs.microso[...]
[146]
웹사이트
"CRT ライブラリの機能 | Microsoft Docs"
https://docs.microso[...]
[147]
웹사이트
"Universal CRT へのコードのアップグレード | Microsoft Docs"
https://docs.microso[...]
[148]
블로그
"Visual C++ 2015 以降のバージョンの再頒布可能パッケージにおけるインストールの前提条件 – Visual Studio サポート チーム blog"
https://blogs.msdn.m[...]
[149]
블로그
"Visual C++ 2015 アプリケーションでの CRT ローカル配置について – Visual Studio サポート チーム blog"
https://blogs.msdn.m[...]
[150]
블로그
"Introducing the Universal CRT | C++ Team Blog"
https://devblogs.mic[...]
[151]
웹사이트
"Universal CRT deployment | Microsoft Docs"
https://docs.microso[...]
[152]
웹사이트
最新のサポートされる Visual C++ のダウンロード
https://support.micr[...]
[153]
웹사이트
Windows での汎用の C ランタイムの更新プログラム
https://support.micr[...]
[154]
뉴스
Visual C++ adds Windows support
https://books.google[...]
InfoWorld
1993-02-22
[155]
웹인용
What's New for Visual C++ in Visual Studio 2013
http://msdn.microsof[...]
Microsoft Developer Network
2013-10-23
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com