검색결과 리스트
VS 2012에 해당되는 글 3건
- 2012.07.19 [ VC11-C++11 ] enum - unscoped enumeration과 scoped enumeration
- 2012.07.12 [ VC11-IDE ] 메모리를 절약하는 VC++11의 STL 컨테이너
- 2012.06.28 [ VC11 ] 대격변(?) Visual C++ 11 (2)
C++11(새로운 C++ 표준의 이름)의 enum은 지금(C++03)과 다르게 두 가지의 enum이 있습니다.
바로 unscoped enumeration과 scoped enumeration 입니다.
unscoped enumeration
unscoped enumeration은 기존의 enum과 비슷한 것 이라고 생각 하면 좋을 것 같습니다.^^
unscoped enumeration은 아래와 같이 정의하고 사용합니다.
enum ITEMTYPE : short
{
WEAPON,
EQUIPMENT,
GEM = 10,
DEFENSE, // C++03까지는 에러이지만 C++11에서는 에러가 아님
};
사용은 아래와 같이
short ItemType = WEAPON;
또는
short ItemType = ITEMTYPE::WEAPON; // C++03에서는 에러
scoped enumeration
scoped enumeration은 아래와 같이 정의하고 사용합니다.
enum class CHARACTER_CLASS : short
{
WARRIOR = 1,
MONK,
FIGHTER,
};
사용은 아래와 같이 합니다.
CHARACTER_CLASS CharClass = CHARACTER_CLASS::WARRIOR;
그러나 아래는 에러입니다.
short CharClassType = FIGHTER; // 에러
scoped enumeration은 unscoped enumeration와 다르게 CHARACTER_CLASS를 생략하면 안됩니다. 즉 WARRIOR 이나 MONK는 CHARACTER_CLASS의 범위 안에 있음을 가리킵니다.
그리고 enum class 대신 enum struct을 사용해도 괜찮습니다. 또 타입을 지정하지 않으면 기본으로 int 타입이 됩니다.
형 변환
unscoped enumeration은 기존과 같이 암묵적으로 정수로 변환할 수 있습니다.
int i = WEAPON;
그러나 scoped enumeration은 명시적으로 타입 캐스팅을 해야합니다.
int i = static_cast<int>( CHARACTER_CLASS::WARRIOR);
< 예제 >
#include <iostream>
// unscoped enumeration
enum ITEMTYPE : short
{
WEAPON,
EQUIPMENT,
GEM = 10,
DEFENSE,
};
// scoped enumeration
enum class CHARACTER_CLASS : short
{
WARRIOR = 1,
MONK,
FIGHTER,
};
enum struct BATTLE_TYPE : short
{
DEATH_MATCH = 1,
TEAM,
};
int main()
{
// unscoped enumeration
std::cout << "ITEM WEAPON의 Type 번호 : " << ITEMTYPE::WEAPON << std::endl;
short ItemType = EQUIPMENT;
std::cout << "ITEM EQUIPMENT의 Type 번호 : " << ItemType << std::endl;
/// scoped enumerations
short CharClassType3 = (short)CHARACTER_CLASS::FIGHTER;
CHARACTER_CLASS CharClass = CHARACTER_CLASS::WARRIOR;
//short CharClassType = FIGHTER; // 에러
//short CharClassType2 = CHARACTER_CLASS::FIGHTER; // 에러
//CHARACTER_CLASS CharClass2 = WARRIOR; // 에러
return 0;
}
VC11의 STL 컨테이너들은 이전 버전에 비해서 크기가 작아져서 메모리를 절약할 수 있게 되었습니다. 이전 버전과 다르게 VC11부터는 데스크탑 뿐만이 아닌 테블렛이나 스마트폰의 모바일 플랫폼 개발에서도 사용되므로 메모리 절약은 적지 않은 도움이 되리라 생각합니다.
아래 표는 x86(32비트 또는 ARM)과 x64(64비트) 플랫폼에서 각 VC 버전 별로 얼마만큼의 메모리를 사용하는 잘 표시하고 있습니다.
이 표는 VC11 뿐만이 아닌 이전 버전 사용자들에게도 도움이 될 것 같습니다. 저와 같은 서버 프로그래머들은 서버 프로그램이 설정한 동접자 수에서 어느 정도의 메모리를 소비할지 어느 정도 계산하고 있어야 하는데 이 표를 보면 메모리 계산할 때 도움이 될 것입니다
표의 바이트 사이즈는 Release 버전 기준입니다. 표에서 'VC9 SP1 SCL=0'은 SCL은 _SECURE_SCL를 뜻하는 것으로 원래 SCL은 기본은 1인데, 최고 스피드를 위해서 수동으로 SCL을 0으로 설정한 것입니다. 또 VC10과 VC11에서는 기본으로 _SECURE_SCL은 0으로 되어 있습니다.
표의 출처는 MSDN입니다^^
드디어 Visual Studio 2012(이하 VS2012)의 RC판이 나왔습니다(사실 꽤 되었죠^^;).
이번 VS의 Visual C++(이하 VC++)의 버전은 11이 됩니다.
한동안 Visual C++은 변화가 거의 없다가 VC++ 9(VS 2008)에서 변화의 조짐을 보이다가 VS 2010에서 새로운 C++ 표준인C++11(그 당시에는 C++0x라고 부름)과 병렬 프로그래밍, 툴의 기능 강화를 통해서 이전에 비해서 큰 변화를 이루었습니다.
또 이번 VS 2012에서도 VS 2010 버전 이상으로 큰 변화가 생겼습니다. 변화는 대격변이라고 부를 수 있을 정도입니다!.
이번에는 다음과 같은 변화가 있습니다.
1. Windows 8 Metro 앱 개발
아주 큰 변화 중의 하나입니다. 정식 제품이 가을쯤에 나올 Windows 8 Metro와 Windows Phone 8용 앱을 C++을 사용하여 개발할 수 있습니다. 이것을 위해 WinRT라는 새로운 플랫폼 API와 C++/CX가 새로 생겼습니다.
2. 툴 기능
다양한 C++ 토큰들에 다양한 색을 지정.
찾을 요소를 눈에 잘 뛰게 해준다.
편의 기능이 코딩 시 멤버 선택.
인텔리센스에서 C++/CLI 지원.
코드스니펫을 이용한 고속 코딩.
3. C++11 지원
이번에는 코어 언어 기능 보다는 라이브러리 기능이 더 중심이 되었습니다. 그러나 코어 언어에서 VC++ 10에서 큰 사랑을 받은 auto에 버금가는 range-based for loop가 있습니다. 그리고 라이브러리에 Thread가 추가 되었습니다. 이번에는 공부할 것이 많습니다 ^^;
4. 컴파일러 개선
CPU 개수에 맞추어 컴파일 속도가 향상.
Auto-Vectorizer에 의한 프로그램 성능 향상.
5. 병렬 프로그래밍
기존의 병렬 라이브러리 개선.
새로운 디버깅 및 시각화 기능에 의해 쉽고 올바른 병렬 프로그래밍 진단.
GPU 병렬 프로그래밍을 위한 C++ AMP 추가.
6. 네이티브 유닛테스트 프레임웍 추가
사제가 아닌 마이크로소프트 순정의 유닛테스트 프레임웍!!!.
이렇게 VC++ 11의 새로운 기능을 정리해 보았습니다. 제가 대충 큰 것만 정리했는데도 공부할 것이 많지 않습니까?^^; 한번에 다 하면 부담되지만 조금씩 하면 충분히 공부할만한 분량입니다. 아직 정식 버전이 나오지 않았으니(가을쯤에 나온다고 합니다) 여유를 가지고 지금부터 조금씩 천천히 공부해 보죠^^
ps 1: VC++의 각 버전 별 내부 버전 번호와 코드에 정의된 버전
브랜드 버전 내부 버전 #define _MSC_VER 버전
Visual C++ 2005 VC8 1400
Visual C++ 2008 VC9 1500
Visual C++ 2010 VC10 1600
Visual C++ 2012 VC11 1700
ps 2: 실행 환경
위에는 VC++11의 좋은 점만 이야기 했지만 개인적으로 걱정되는 것이 있습니다. 가장 큰 문제가 실행 환경입니다. VC++11은Windows 7 및 Windows Server 2008 R2 이상에서만 실행되고 또 VC++11을 이용해서 만든 프로그램도 Windows 7 및Windows Server 2008 R2 이상에서만 실행할 수 있습니다.
Windows 8 Metro 앱 개발을 하거나 저처럼 서버 개발을 하는 개발자에게는 큰 문제가 되지 않을 수도 있지만 클라이언트 개발자에게는 이 부분이 VC++11을 사용하는데 큰 걸림돌이 되리라 생각합니다
=> 그런데 VC++ 팀블로그를 보니 많은 고객들이 XP 지원을 요청해서 가을쯤에 업데이트를 통해서 XP도 지원해 준다고 합니다.^^
http://blogs.msdn.com/b/vcblog/archive/2012/06/15/10320645.aspx
이로써 큰 고민을 하나 해결 되었네요^^
댓글