Visual C++ 2010의 새로운 기능

이 문서에서는 Visual Studio 2010에서 사용할 수 있는 Visual C++의 새로운 기능과 향상된 기능에 대해 설명합니다.

Visual C++ 컴파일러 및 링커

auto 키워드

auto 키워드에 새 용도가 추가되었습니다. 변수 형식이 변수 선언의 초기화 식에서 추론되는 변수를 선언하려면 auto 키워드의 기본 의미를 사용합니다. /Zc:auto 컴파일러 옵션은 auto 키워드의 새 의미 또는 이전 의미를 적용합니다.

decltype 형식 지정자

decltype 형식 지정자는 지정된 식의 형식을 반환합니다. decltype 형식 지정자를 auto 키워드와 함께 사용하여 복합 형식이나 컴파일러만 알고 있는 형식을 선언할 수 있습니다. 예를 들어, 조합을 사용하여 반환 형식이 템플릿 인수의 형식에 따라 달라지는 템플릿 함수를 선언합니다. 또는 다른 함수를 호출한 후 호출된 함수의 반환 형식을 반환하는 템플릿 함수를 선언합니다.

람다 식

람다 함수에는 함수 본문만 있고 이름이 없습니다. 람다 함수에는 함수 포인터와 함수 개체의 좋은 특징이 결합되어 있습니다.

람다 함수를 단독으로 함수 개체 대신 템플릿 함수 매개 변수로 사용하거나 auto 키워드와 함께 사용하여 람다 형식의 변수를 선언할 수 있습니다.

Rvalue 참조

rvalue 참조 선언자(&&)rvalue에 대한 참조를 선언합니다. rvalue 참조를 사용하면 의미 체계 이동 및 완벽한 전달을 통해 보다 효율적인 생성자, 함수 및 템플릿을 작성할 수 있습니다.

static_assert 선언

static_assert 선언은 런타임에 테스트하는 다른 어설션 메커니즘과는 달리 컴파일 타임에 소프트웨어 어설션을 테스트합니다. 어설션이 실패할 경우 컴파일도 실패하면서 지정된 오류 메시지가 표시됩니다.

nullptr 및 __nullptr 키워드

Visual C++ 컴파일러에서는 nullptr 키워드를 네이티브 코드 또는 관리 코드와 함께 사용할 수 있습니다. nullptr 키워드는 개체 핸들, 내부 포인터 또는 네이티브 포인터가 개체를 가리키지 않음을 나타냅니다. 컴파일러에서는 nullptr을 /clr 컴파일러 옵션이 사용되면 관리 코드로 해석하고 /clr 옵션이 사용되지 않으면 네이티브 코드로 해석합니다.

Microsoft 고유의 __nullptr 키워드는 nullptr과 동일한 의미를 갖지만 네이티브 코드에만 적용됩니다. /clr 컴파일러 옵션을 사용하여 네이티브 C/C++ 코드를 컴파일하면 nullptr 키워드가 네이티브 용어인지 아니면 관리 용어인지 컴파일러에서 확인할 수 없습니다. 사용자의 의도를 컴파일러에게 명확히 알리려면 nullptr 키워드를 사용하여 관리 용어를 지정하고, __nullptr을 사용하여 네이티브 용어를 지정합니다.

/Zc:trigraphs 컴파일러 옵션

기본적으로 삼중자는 지원되지 않습니다. 삼중자 지원을 활성화하려면 /Zc:trigraphs 컴파일러 옵션을 사용합니다.

삼중자는 연속되는 두 개의 물음표(??)와 물음표 이외의 세 번째 문자로 이루어집니다. 컴파일러에서는 삼중자를 상응하는 문장 부호 문자로 바꿉니다. 예를 들어, 컴파일러는 ??= 삼중자를 #(숫자 기호) 문자로 바꿉니다. 삼중자는 특정 문장 부호 문자를 포함하지 않는 문자 집합이 사용되는 C 소스 파일에서 사용합니다.

새 프로필 기반 최적화 옵션

PogoSafeMode는 프로필 기반 최적화의 새 옵션으로 응용 프로그램을 최적화할 때 안전 모드를 사용할지 또는 고속 모드를 사용할지를 지정하는 데 사용됩니다. 안전 모드는 스레드로부터 안전하지만 고속 모드보다 느립니다. 고속 모드는 기본 동작입니다.

새 CLR(공용 언어 런타임) 옵션 /clr:nostdlib

새 옵션이 /clr(공용 언어 런타임 컴파일)에 추가되어 있습니다. 동일한 라이브러리의 여러 버전이 포함되어 있으면 컴파일러 오류가 발생합니다. 새 옵션을 사용하면 기본 CLR 라이브러리를 제외하여 프로그램에서 지정된 버전을 사용하도록 할 수 있습니다.

새 pragma 지시문 detect_mistmatch

Pragma 지시문 detect_mismatch를 사용하면 파일에 태그를 놓고 같은 이름의 다른 태그와 비교할 수 있습니다. 같은 이름의 값이 여럿이면 링커에서 오류가 발생합니다.

XOP 내장 형식, FMA4 내장 형식 및 LWP 내장 형식

새로운 내장 함수가 Visual Studio 2010 SP1용으로 추가된 XOP 내장 함수, Visual Studio 2010 SP1용으로 추가된 FMA4 내장 함수Visual Studio 2010 SP1용으로 추가된 LWP 내장 함수 프로세서 기술을 지원하도록 추가되었습니다. __cpuid, __cpuidex를 사용하여 특정 컴퓨터에서 지원되는 프로세서 기술을 확인할 수 있습니다.

Visual C++ 프로젝트 및 빌드 시스템

MSBuild

이제 Visual C++ 솔루션 및 프로젝트는 VCBUILD.exe를 대체하는 MSBuild.exe를 사용하여 빌드됩니다. MSBuild는 다른 Visual Studio 언어 및 프로젝트 형식에서 사용되는 것과 동일한 유연하고 확장 가능한 XML 기반 빌드 도구입니다. 이러한 변경으로 인해 이제 Visual C++ 프로젝트 파일에 XML 파일 형식이 사용되고 .vcxproj 파일 확장명이 지정됩니다. 이전 버전의 Visual Studio에서 만든 Visual C++ 프로젝트 파일은 이 새로운 파일 형식으로 자동 변환됩니다. 자세한 내용은 MSBuild(Visual C++)를 참조하십시오.

VC++ 디렉터리

이제 VC++ 디렉터리 설정은 두 위치에서 찾을 수 있습니다. VC++ 디렉터리에 대한 값을 프로젝트별로 설정하려면 프로젝트 속성 페이지를 사용합니다. VC++ 디렉터리에 대한 값을 전역적으로, 즉 구성별로 설정하려면 속성 관리자와 속성 시트를 사용합니다.

프로젝트 간 종속성

이전 버전에서는 프로젝트 간의 정의된 종속성이 솔루션 파일에 저장되었습니다. 이러한 솔루션이 새 프로젝트 파일 형식으로 변환되는 경우 종속성은 프로젝트 간 참조로 변환됩니다. 솔루션 종속성과 프로젝트 간 참조의 개념이 서로 다르기 때문에 이와 같은 변환은 응용 프로그램에 영향을 줄 수 있습니다.

매크로 및 환경 변수

새 _ITERATOR_DEBUG_LEVEL 매크로는 반복기에 대한 디버깅 지원을 호출합니다. 이전의 _SECURE_SCL 및 _HAS_ITERATOR_DEBUGGING 매크로 대신 이 매크로를 사용하십시오.

Visual C++ 라이브러리

동시성 런타임 라이브러리

동시성 런타임 프레임워크는 동시에 실행되는 응용 프로그램 및 구성 요소를 지원하며, Visual C++로 동시 응용 프로그램을 프로그래밍할 수 있는 프레임워크입니다. 동시 응용 프로그래밍을 지원하기 위해 PPL(병렬 패턴 라이브러리)은 세부적인 병렬 처리를 수행하는 데 일반적으로 사용되는 컨테이너 및 알고리즘을 제공합니다. 비동기 에이전트 라이브러리는 정교하지 않은 데이터 흐름 및 파이프라인 작업을 위해 행위자 기반 프로그래밍 모델과 메시지 전달 인터페이스를 둘 다 제공합니다.

표준 C++ 라이브러리

다음 목록에서는 표준 C++ 라이브러리의 변경 내용에 대해 설명합니다.

  • 새로운 rvalue 참조 C++ 언어 기능이 표준 템플릿 라이브러리의 많은 함수에 대한 의미 체계 이동 및 완벽한 전달을 구현하는 데 사용되었습니다. 의미 체계 이동 및 완벽한 전달은 변수 또는 매개 변수를 할당하는 작업의 성능을 크게 향상시킵니다.

  • 또한 Rvalue 참조는 auto_ptr 클래스보다 안전한 스마트 포인터인 새로운 unique_ptr 클래스를 구현하는 데에도 사용됩니다. unique_ptr 클래스는 이동할 수 있지만 복사할 수 없으며, 안전성에 영향을 주지 않고 엄격한 소유권 의미 체계를 구현하며, rvalue 참조를 인식하는 컨테이너에서 잘 작동합니다. auto_ptr 클래스는 더 이상 사용되지 않습니다.

  • find_if_not, copy_if, is_sorted 등과 같은 15가지 새로운 함수가 <algorithm> 헤더에 추가되었습니다.

  • <memory> 헤더에서 새로운 make_shared 함수를 사용하면 개체를 구성할 때 개체의 공유 포인터를 편리하고, 강력하고, 효율적으로 만들 수 있습니다.

  • 단일 연결 목록이 <forward_list> 헤더에서 지원됩니다.

  • 새로운 cbegin, cend, crbegin 및 crend 멤버 함수가 컨테이너 앞뒤로 이동하는 const_iterator를 제공합니다.

  • <system_error> 헤더 및 관련 템플릿이 낮은 수준의 시스템 오류 처리를 지원합니다.

  • exception_ptr 클래스의 멤버는 스레드 간 예외를 전송하는 데 사용될 수 있습니다.

  • <codecvt> 헤더는 유니코드 문자의 다양한 인코딩을 다른 인코딩으로 변환하도록 지원합니다.

  • <allocators> 헤더는 노드 기반 컨테이너용 메모리 블록을 할당하고 해제하는 데 유용한 몇 가지 템플릿을 정의합니다.

  • <random> 헤더에 대한 수많은 업데이트가 있습니다.

MFC(Microsoft Foundation Class) 라이브러리

windows 7 기능

MFC는 리본 UI(사용자 인터페이스), 작업 표시줄, 점프 목록, 탭이 있는 축소판, 축소판 미리 보기, 진행률 표시줄, 아이콘 오버레이, 검색 인덱싱 등과 같은 많은 Windows 7 기능을 지원합니다. MFC에서 많은 Windows 7 기능을 자동으로 지원하므로 기존 응용 프로그램을 수정하지 않아도 됩니다. 새로운 응용 프로그램의 다른 기능을 지원하려면 MFC 응용 프로그램 마법사에서 사용할 기능을 지정하십시오.

멀티 터치 인식

MFC는 Microsoft Surface 운영 체제용으로 작성된 응용 프로그램과 같이 멀티 터치 사용자 인터페이스가 있는 응용 프로그램을 지원합니다. 멀티 터치 응용 프로그램은 Windows 터치 메시지 및 터치 메시지가 결합된 제스처 메시지를 처리할 수 있습니다. 터치 및 제스처 이벤트에 대해 응용 프로그램을 등록하기만 하면 운영 체제에서 멀티 터치 이벤트를 이벤트 처리기로 라우트합니다.

높은 DPI 인식

기본적으로 MFC 응용 프로그램은 이제 높은 DPI 인식 응용 프로그램입니다. 응용 프로그램에서 높은 DPI(높은 인치당 도트 수)를 인식하는 경우 운영 체제에서 창, 텍스트 및 기타 UI 요소를 현재 화면 해상도로 배율 조정할 수 있습니다. 즉, 배율 조정된 이미지는 더 올바르게 배치되며 잘려지거나 모자이크로 표시되지 않습니다.

다시 시작 관리자

다시 시작 관리자는 응용 프로그램이 예기치 않게 닫히거나 다시 시작된 경우 문서를 자동 저장하고 응용 프로그램을 다시 시작합니다. 예를 들어 자동 업데이트에 의해 닫힌 응용 프로그램을 시작하기 위해 다시 시작 관리자를 사용할 수 있습니다. 다시 시작 관리자를 사용하도록 응용 프로그램을 구성하는 방법에 대한 자세한 내용은 방법: 다시 시작 관리자 지원 추가를 참조하십시오.

CTaskDialog

CTaskDialog 클래스를 표준 AfxMessageBox 메시지 상자 대신 사용할 수 있습니다. CTaskDialog 클래스는 표준 메시지 상자보다 자세한 정보를 표시하고 수집합니다.

SafeInt 라이브러리

새로운 SafeInt 라이브러리는 정수 오버플로를 고려한 안전한 산술 연산을 수행합니다. 또한 이 라이브러리는 여러 유형의 정수를 비교합니다.

새로운 ATL(액티브 템플릿 라이브러리) 매크로

PROP_ENTRY_TYPEPROP_ENTRY_TYPE_EX의 기능을 확장하기 위해 새 매크로가 ATL에 추가되었습니다. PROP_ENTRY_INTERFACEPROP_ENTRY_INTERFACE_EX를 사용하면 유효한 CLSID 목록을 추가할 수 있습니다. PROP_ENTRY_INTERFACE_CALLBACKPROP_ENTRY_INTERFACE_CALLBACK_EX를 사용하면 CLSID가 유효한지 여부를 확인하기 위해 콜백 함수를 지정할 수 있습니다.

/analyze 경고

대부분의 /analyze (Enterprise Code Analysis) 경고가 CRT(C 런타임 오류), MFC 및 ATL 라이브러리에서 제거되었습니다.

애니메이션 및 D2D 지원

MFC에서는 이제 애니메이션 및 Direct2D 그래픽을 지원합니다. MFC 라이브러리에는 몇 가지 새로운 MFC 클래스 및 이 기능을 지원하는 함수가 포함되어 있습니다. 또한 D2D 개체 및 애니메이션 개체를 프로젝트에 추가하는 방법을 알려주는 두 가지 새로운 연습도 있습니다. 이러한 연습은 연습: MFC 프로젝트에 D2D 개체 추가연습: MFC 프로젝트에 애니메이션 추가입니다.

IDE

생산성을 향상시킬 수 있도록 Visual C++ 2010에서 IDE(통합 개발 환경)의 성능, 정확성, 확장성 및 도구가 상당히 개선되었습니다.

개선된 IntelliSense

Visual C++용 IntelliSense가 보다 빠르고 정확하며, 대형 프로젝트를 처리할 수 있도록 완전히 다시 디자인되었습니다. 이러한 개선을 이루기 위해 IDE는 개발자가 원본 코드를 보고 수정하는 방식과 IDE에서 원본 코드 및 프로젝트 설정을 사용하여 솔루션을 빌드하는 방법을 구분합니다.

이러한 의무의 분리 덕분에 클래스 뷰 및 새로운 탐색 대화 상자와 같은 검색 기능이 이전의 비 컴파일 탐색(.ncb) 파일을 대체하는 새로운 SQL Server 데스크톱 데이터베이스 파일(.sdf)에 기반한 시스템에서 처리됩니다. 요약 정보, 자동 완성, 매개 변수 도움말 등의 IntelliSense 기능은 필요한 경우에만 변환 단위를 구문 분석합니다. 새로운 호출 계층 구조 창과 같은 혼합 기능의 경우 탐색과 IntelliSense 기능을 함께 사용합니다.

IntelliSense는 순간적으로 필요한 정보만 처리하므로 IDE의 반응 속도가 더 빨라집니다. 또한 정보가 최신으로 유지되므로 IDE 뷰 및 창의 정확성도 높아집니다. 마지막으로 IDE 인프라가 더 체계적으로 구성되고, 더 많은 기능을 갖추며, 확장성이 높아져서 대형 프로젝트를 처리할 수 있습니다.

개선된 IntelliSense 오류

IDE는 IntelliSense의 손실을 일으킬 수 있는 오류를 보다 잘 감지하고 이러한 오류 밑에 빨간색 물결선을 표시합니다. 또한 IDE에서는 오류를 오류 목록 창에 보고합니다. 문제를 일으키는 코드를 표시하려면 오류 목록 창에서 해당 오류를 두 번 클릭합니다.

#include 자동 완성 기능

IDE에서는 #include 키워드 자동 완성을 지원합니다. #include를 입력하면 IDE에서 유효한 헤더 파일의 드롭다운 목록 상자를 만듭니다. 파일 이름을 계속 입력하면 IDE에서 입력 내용에 기반하여 목록을 필터링합니다. 언제든지 목록에서 포함할 파일을 선택할 수 있습니다. 따라서 정확한 파일 이름을 몰라도 파일을 신속히 포함할 수 있습니다.

탐색

탐색 대화 상자에서 지정한 문자열과 일치하는 프로젝트의 모든 기호 및 파일을 검색할 수 있습니다. 검색 문자열에 문자를 추가로 입력할 때마다 검색 결과가 즉시 바뀝니다. 결과 피드백 필드에 찾은 항목 수가 표시되므로 더 상세한 검색을 수행할지 여부를 쉽게 결정할 수 있습니다. 종류/범위, 위치미리 보기 피드백 필드를 활용하면 비슷한 이름의 항목을 쉽게 구분할 수 있습니다. 또한 이 기능을 다른 프로그래밍 언어를 지원하도록 확장할 수 있습니다.

병렬 디버깅 및 프로파일링

Visual Studio 디버거는 동시성 런타임을 인식하므로 병렬 처리 응용 프로그램 문제를 해결하는 데 도움이 됩니다. 새로운 동시성 프로파일러 도구를 사용하여 응용 프로그램의 전반적인 동작을 시각화할 수 있습니다. 또한 새로운 도구 창을 사용하여 작업 상태와 호출 스택을 시각화할 수도 있습니다.

리본 디자이너

리본 디자이너는 MFC 리본 UI를 만들고 수정하는 데 사용할 수 있는 그래픽 편집기입니다. 최종 리본 UI는 XML 기반 리소스 파일(.mfcribbon-ms)로 표시됩니다. 기존 응용 프로그램의 경우 몇 개의 코드 줄을 임시로 추가하고 리본 디자이너를 호출하여 현재 리본 UI를 캡처할 수 있습니다. 리본 리소스 파일을 만든 후 리본 리소스를 로드하는 몇 개의 문으로, 작성한 리본 UI 코드를 바꿀 수 있습니다.

호출 계층 구조

호출 계층 구조 창에서 특정 함수에 의해 호출된 모든 함수 또는 특정 함수를 호출하는 모든 함수로 이동할 수 있습니다.

도구

MFC 클래스 마법사

Visual C++ 2010에서는 잘 알려진 MFC 클래스 마법사 도구를 다시 가져옵니다. MFC 클래스 마법사를 사용하면 여러 원본 파일을 수동으로 수정하지 않고도 프로젝트에 클래스, 메시지 및 변수를 간편하게 추가할 수 있습니다.

ATL 컨트롤 마법사

ProgID 필드는 더 이상 ATL 컨트롤 마법사에 의해 자동으로 채워지지 않습니다. ATL 컨트롤에 **ProgID,**가 없으면 다른 도구에서 해당 컨트롤을 사용할 수 없습니다. 컨트롤에 ProgID가 있어야 작동할 수 있는 도구에는 활성 컨트롤 삽입 대화 상자가 있습니다. 이 대화 상자에 대한 자세한 내용은 ActiveX 컨트롤 삽입 대화 상자를 참조하십시오.

Microsoft 매크로 어셈블러 참조

YMMWORD 데이터 형식이 추가됨에 따라 Intel AVX(Advanced Vector Extensions) 명령어에 포함되어 있는 256비트 멀티미디어 피연산자가 지원됩니다.

참고 항목

개념

Visual C++의 주요 변경 사항

기타 리소스

Visual C++ 2010 시작