이번은 chrono clock 클래스에 대해서 간단하게 설명 하겠습니다.

앞의 글들을 보신 분 들은 아시겠지만 이미 clock 클래스를 사용하고 있었습니다.

 

다만 저는 현재까지는 system_clock 이라는 클래스만을 사용하고 있었습니다.

 

chrono에는 system_clock뿐만 아닌 steady_clock high_resolution_clock이 있습니다.

 

 

namespace std {

 

namespace chrono {

 

  class system_clock;

 

}}

 

 

namespace std {

 

namespace chrono {

 

  class steady_clock;

 

}}

 

   

 

namespace std {

 

namespace chrono {

 

  class high_resolution_clock;

 

}}

 

 

system_clock는 가장 일반적으로 사용하는 것으로 시스템 시간을 표현하기 위한 시간입니다.

그리고 C 런타임의 time_t와 호환성을 가지고 있습니다.

 

멤버 중에 to_time_t from_time_t가 있는데 이름을 보면 알 수 있듯이

to_time_t system_clock::time_point time_t로 변환하고,

from_time_t time_t system_clock::time_point로 변환 합니다.

  

// to_time_t

system_clock::time_point CurTime = system_clock::now();

std::time_t t = system_clock::to_time_t(CurTime);

 

// from_time_t

std::time_t t = time(NULL);

system_clock::time_point CurTime = system_clock::from_time_t(t);

 

steady_clock은 물리적인 시간처럼 결코 역행하지 않는 시간을 나타내기 위한 시간입니다.

이 말은 steady_clock 이외의 clock 클래스는 time_point를 얻은 후 os에서 날짜를 과거를 되돌린 후 time_point을 얻으면 앞에 얻은 시간보다 과거의 시간이 얻어지는데 steady_clock에서는 절대 그렇지 않습니다. 그래서 시간의 흐름이 바뀌지 않는 시간을 얻고 싶을 때는 steady_clock을 사용합니다.

 

 

high_resolution_clock는 해당 플랫폼(Windows 또는 Linux )에서 가장 짧은 단위의 시간입니다.

이 클래스는 system_clock steady_clock의 다른 별칭으로 정의되기도 합니다.

 

 

 

보통 프로그래밍에서 아주 고해상도의 시간 단위가 아닌 경우 대부분 GetTickCount() 함수를 사용했는데(Windows에서) 앞으로는 더 간단하고 다양한 표현 방법으로 시간을 다룰 수 있는 chrono를 꼭 사용해 보시기 바랍니다^^

저작자 표시
신고
by 흥배 2012.08.16 09:00

<예제.2>에서 보았듯이 chrono는 다양한 정밀도 타입으로 시간을 표시할 수 있습니다.

 

그리고 각 시간 정밀도 타입 별로 생성할 때 미리 값을 설정할 수 있습니다.

 

std::chrono::hours H1(1);

std::chrono::seconds S1(10);

std::chrono::milliseconds MILS1(100);

 

또한 이 시간 타입을 서로 연산할 수도 있습니다.

 

std::chrono::hours H1(1);

std::chrono::hours H2(2);

std::chrono::hours H3 = H1 + H2;

 

물론 다른 시간 타입을 연산할 수도 있습니다

 

std::chrono::seconds S1(10);

std::chrono::milliseconds MILS1(100);

std::chrono::milliseconds MILS2 = S1 + MILS1;

 

다른 시간 타입을 연산할 때 주의할 점이 있습니다. 아래처럼

 

std::chrono::milliseconds MILS2 = S1 + MILS1;

 

의 경우는 초와 밀리초라는 서로 다른 타입을 더하지만 값을 저장하는 타입이 밀리초이기 때문에 잃어버리는 값이 발생하지 않으므로 연산에 문제가 없습니다.

그러나 아래와 같이

std::chrono:: seconds S2 = S1 + MILS1;

로 하는 경우는 밀리초 부분을 잃어버리게 되기 때문에 컴파일 에러가 발생합니다.

 

이런 경우는 명시적으로 형 변환을 시켜줘야 합니다.

std::chrono::seconds S2 = std::chrono::duration_cast< std::chrono::seconds >(S1 + MILS1);

 

 

< 예제. 3 >

#include <chrono>

#include <iostream>

 

int main()

{

    {

        std::chrono::hours H1(1); // 1시간

       

        std::cout << "H1(1) : " << H1.count() << std::endl;

        

        std::chrono::seconds S1(10);

        std::chrono::seconds S2(120);

 

        std::cout << "S1(10) : " << S1.count() << std::endl;

        std::cout << "S2(120) : " << S2.count() << std::endl;

    }

 

    {

        std::chrono::hours H1(1);

        std::chrono::hours H2(2);

        std::chrono::hours H3 = H1 + H2;

 

        std::cout << "H1 + H2 = : " << H3.count() << std::endl;

  

        std::chrono::seconds S1(10);

        std::chrono::milliseconds MILS1(100);

        std::chrono::milliseconds MILS2 = S1 + MILS1;

 

        std::cout << "S1 + MILS1 = : " << MILS2.count() << std::endl;

  

        std::chrono::seconds S2 = std::chrono::duration_cast< std::chrono::seconds >(S1 + MILS1);

 

        std::cout << "S1 + MILS1 = : " << S2.count() << std::endl;

    }

 

    return 0;

}

 


<
실행 결과 >



저작자 표시
신고
by 흥배 2012.08.09 09:00

chronoC++11에서 새로 추가된 시간 라이브러리입니다. 기존의 C 런타임에서 제공하는 time 함수에 비해서 다양한 기능이 있고, 사용이 쉽고 정밀도는 훨씬 높습니다. time 함수는 초 단위의 값만 측정할 수 있는 것에 비해 chrono는 나노 밀리 초 단위도 측정할 수 있습니다.

 

현재의 C++(C++03)에서는 초 단위보다 더 정밀한 단위로 시간을 측정할 때는 OS에서 제공하는 API를 사용해야 했는데 chrono를 사용하면 OS 독립적으로 높은 단위의 시간을 측정할 수 있습니다.

 

VC10에서는 chrono가 들어가지 않았지만 이번 VC11에서 chrono STL에 들어갔습니다. 만약 VC11을 사용하지 못하는 경우라면 Boost 라이브러리를 사용하면 사용할 수 있습니다.

 

chrono를 사용하면 특정 시간 구간에 걸린 시간을 초, 밀리 초, 나노 초 단위로 얻을 수 있으며 또 시간끼리 연산을 할 수 있습니다

 

 

 

chrono 사용 방법

 

chrono를 사용하기 위해서는 아래의 헤더 파일을 추가합니다.

#include <chrono>

 

 

chrono에 대한 자세한 설명에 앞서 어떤 기능인지 좀 더 쉽게 알 수 있도록 예제를 하나 보여드리겠습니다. 아래의 예제는 어떤 함수의 성능을 측정하기 위해서 chrono를 사용했습니다.

 

 

< 예제. 1 >

#include <chrono>

#include <iostream>

#include <cmath>

 

 

void Test()

{

           for ( long i = 0; i < 10000000; ++i )

           {

                     std::sqrt( 123.456L );

           }

}

 

 

 

int main()

{

 

    std::chrono::system_clock::time_point start = std::chrono::system_clock::now();

 

    Test();

          

    std::chrono::duration<double> sec = std::chrono::system_clock::now() - start;

 

    std::cout << "Test() 함수를 수행하는 걸린 시간() : " << sec.count() << " seconds" << std::endl;

 

    return 0;

}

 

< 실행 결과 >

 


<예제.1>에서는 std::chrono::system_clock::now()을 사용하여 현재 시간을 얻습니다.

 std::chrono::system_clock::time_point start = std::chrono::system_clock::now();

여기서 time_point 타입은 시간 상의 한 축을 뜻합니다.

 

 

 

이후 Test() 함수를 실행한 후 다시 현재 시간을 얻은 후 Test()를 시작하기 전에 저장한 현지 시간을 빼면 Test()를 수행하는 걸린 시간을 얻을 수 있습니다.

 

std::chrono::duration<double> sec = std::chrono::system_clock::now() - start;

 

 

* std::chrono::system_clock::now()에 의해서 얻는 시간의 초기 시간은 1970년 입니다.

 

 


 

시간 단위

chrono는 경과 시간을 계산할 때 다양한 시간 타입으로 계산할 수 있습니다.

 

<예제.1>에서는 초 단위의 정밀도로 소수점까지 표시할 수 있었습니다.

 

std::chrono::duration<double> sec = std::chrono::system_clock::now() - start;

 

그런데 보통은 소수점이 나오는 결과 값보다는 정수로 나오는 값을 사용하는 경우가 많을 것입니다.

 

 

chrono에서는 경과 시간을 나타내는 클래스는 duration입니다.

duration 6개의 시간 단위를 지원합니다.

 

std::chrono::nanoseconds  // 나노 세컨드. 10억분의 1

std::chrono::microseconds // 마이크로 세컨드. 100만분의 1

std::chrono::milliseconds   // 밀리 세컨드. 1000분의 1

std::chrono::seconds        //

std::chrono::minutes         //

std::chrono::hours            //

 

<예제.1>을 수정하여 위에 열거한 chrono의 다양한 단위를 사용하여 시간 측정을 해 보겠습니다.

 

< 예제. 2 >

#include <chrono>

#include <iostream>

#include <cmath>

 

 

void Test()

{

           for ( long i = 0; i < 10000000; ++i )

           {

                     std::sqrt( 123.456L );

           }

}

 

int main()

{

    std::chrono::system_clock::time_point StartTime = std::chrono::system_clock::now();

          

    Test();

 

    std::chrono::system_clock::time_point EndTime = std::chrono::system_clock::now();

 

 

 

    std::chrono::duration<double> DefaultSec = EndTime - StartTime;

 

    std::chrono::nanoseconds nano = EndTime - StartTime;

 

    std::chrono::microseconds micro = std::chrono::duration_cast<std::chrono::microseconds>(EndTime - StartTime);

 

    std::chrono::milliseconds mill  = std::chrono::duration_cast<std::chrono::milliseconds>(EndTime - StartTime);

 

    std::chrono::seconds sec = std::chrono::duration_cast<std::chrono::seconds>(EndTime - StartTime);

 

    std::chrono::minutes min = std::chrono::duration_cast<std::chrono::minutes>(EndTime - StartTime);

 

    std::chrono::hours hour = std::chrono::duration_cast<std::chrono::hours>(EndTime - StartTime);

  

    std::cout << "Test() 함수를 수행하는 걸린 시간 : " << DefaultSec.count() << " default" << std::endl;

    std::cout << "Test() 함수를 수행하는 걸린 시간 : " << nano.count() << " nanoseconds" << std::endl;

    std::cout << "Test() 함수를 수행하는 걸린 시간 : " << micro.count() << " microseconds" << std::endl;

    std::cout << "Test() 함수를 수행하는 걸린 시간 : " << mill.count() << " milliseconds" << std::endl;

    std::cout << "Test() 함수를 수행하는 걸린 시간 : " << sec.count() << " seconds" << std::endl;

    std::cout << "Test() 함수를 수행하는 걸린 시간 : " << min.count() << " minutes" << std::endl;

    std::cout << "Test() 함수를 수행하는 걸린 시간 : " << hour.count() << " hour" << std::endl;

          

    return 0;

}

 

< 실행 결과 >


신고
by 흥배 2012.08.02 09:00

대부분의 boost 라이브러리는 원하는 기능의 헤더 파일을 포함하면 사용할 수 있지만 OS의 기능을 사용하는 것들은 빌드를 해야 합니다.

 

저는 boost 라이브러리 1.50을 다운로드 받아서

E:\Dev\CommonLib\boost_1_50_0

디렉토리에 압축을 풀었습니다.

 

먼저 빌드 실행 파일을 만들기 위해서 위의 디렉토리에서 bootstrap.bat 를 실행합니다.

 

디렉토리에 b2.exe와 bjam.exe 파일 두개가 만들어졌습니다.

저는 이중 bjam.exe를 사용하여 빌드를 하였습니다. 참고로 예전에는 bjam.exe를 사용하였으나 근래에는 b2.exe로 넘어가는 추세입니다.

 

제 컴퓨터에는 VC10과 VC11(RC 버전)이 있는데 기본적으로 가장 최신의 VC를 대상으로 빌드를 하는 것 같습니다.

물론 옵션을 지정하면 VC 버전이나 64비트, 빌드 출력 디렉토리도 지정할 수 있습니다.

 

옵션으로 디렉토리를 지정하지 않으면 라이브러리 파일은 stage\lib 디렉토리에 생성됩니다.

 


추가

위의 방식으로 하면 '런타임 라이브러리 정적 링크' 라이브러리(빌드 후 만들어지는 lib 파일에 -sgd 가 붙는)가 만들어 지지 않습니다.

그래서 저는 다시 b2.exe 파일을 사용하여 빌드를 했습니다.

b2.exe 명령어를 사용할 때 옵션으로 -prefix (빌드 라이브러리가 생성될 디렉토리)를 붙이지 않으면 이상한 곳에 만들어질 수 있으니 꼭 붙여야 합니다.

저는 stage/lib 디렉토리에 만들어지게 하고 싶어서 다음과 같이 했습니다.

b2 -prefix=.\stage\lib --toolset=msvc runtime-link=static

예)
VS 2005
/MT, /MTd
b2 -prefix=.\stage\lib --toolset=msvc-8.0 runtime-link=static 

/MD, /MDd
b2 -prefix=.\stage\lib --toolset=msvc-8.0 runtime-link=shared


VS 2012
/MT, /MTd
b2 --stagedir=stage --toolset=msvc-11.0 runtime-link=static 

/MD, /MDd
b2 --stagedir=stage --toolset=msvc-11.0 runtime-link=shared

64비트
/MT, /MTd
b2 --stagedir=stage64 address-model=64 --toolset=msvc-11.0 runtime-link=static 

/MD, /MDd
b2 --stagedir=stage64 address-model=64 --toolset=msvc-11.0 runtime-link=shared




빌드 방법 참고 

1. Boost 라이브러리 빌드 링크 모음 
http://jacking.tistory.com/1068


2. (일본어) http://blog.goo.ne.jp/nourea/e/8028f3c519e881dac5885575e4a0a96f

3. Boost 빌드 http://lunapiece.net/Article/27356

신고
by 흥배 2012.07.31 09:00

unscoped enumeration scoped enumeration 둘 다 전방 선언을 할 수 있습니다.

 

아래와 같이합니다.

enum ITEMTYPE : short;

enum class CHARACTER_CLASS : short;

 

전방 선언을 할 때 unscoped enumeration은 타입 선언을 생략할 수 없지만 scoped enumeration은 타입 선언을 생략 할 수 있습니다.

 

아래 예제 코드를 보면 전방 선언을 올바르게 사용한 것과 잘못 사용한 예를 볼 수 있습니다.


< TypeDef.h >

 

#pragma once

 

enum ITEMTYPE : short

{

           WEAPON,

           EQUIPMENT,

           GEM                          = 10,

           DEFENSE,

};

 

enum class CHARACTER_CLASS1 : short

{

           WARRIOR                    = 1,     

           MONK,

           FIGHTER,

};

 

enum class CHARACTER_CLASS2

{

           WARRIOR                    = 1,     

           MONK,

           FIGHTER,

};

 

 

 

 

 

< Character.h >

 

#pragma once

 

enum ITEMTYPE : short;

//enum ITEMTYPE;                                          // 에러

//enum class ITEMTYPE : short;                       // 에러

 

 

enum class CHARACTER_CLASS1 : short;

//enum class CHARACTER_CLASS1;                  // 에러

//enum class CHARACTER_CLASS1 : int;           // 에러

//enum CHARACTER_CLASS1 : short;                // 에러

 

 

enum class CHARACTER_CLASS2;

 

 

 

struct Character

{

           ITEMTYPE m_ItemType;

          

           void SetItemType( ITEMTYPE Type );

 

 

           CHARACTER_CLASS1 m_Class;

          

           void SetClass( CHARACTER_CLASS1 CharClass );

};

 

 

 

 

< Character.cpp >

 

#include "Character.h"

#include "TypeDef.h"

 

 

void Character::SetItemType( ITEMTYPE Type )

{

           m_ItemType = Type;

}

 

void Character::SetClass( CHARACTER_CLASS1 CharClass )

{

           m_Class = CharClass;

}

 

저작자 표시
신고
by 흥배 2012.07.27 09:00

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;

}

 

 

저작자 표시
신고
by 흥배 2012.07.19 09:00

VC11 STL 컨테이너들은 이전 버전에 비해서 크기가 작아져서 메모리를 절약할 수 있게 되었습니다. 이전 버전과 다르게 VC11부터는 데스크탑 뿐만이 아닌 테블렛이나 스마트폰의 모바일 플랫폼 개발에서도 사용되므로 메모리 절약은 적지 않은 도움이 되리라 생각합니다.

 

아래 표는 x86(32비트 또는 ARM) x64(64비트) 플랫폼에서 각 VC 버전 별로 얼마만큼의 메모리를 사용하는 잘 표시하고 있습니다.

 

이 표는 VC11 뿐만이 아닌 이전 버전 사용자들에게도 도움이 될 것 같습니다. 저와 같은 서버 프로그래머들은 서버 프로그램이 설정한 동접자 수에서 어느 정도의 메모리를 소비할지 어느 정도 계산하고 있어야 하는데 이 표를 보면 메모리 계산할 때 도움이 될 것입니다

 

표의 바이트 사이즈는 Release 버전 기준입니다. 표에서 'VC9 SP1 SCL=0'SCL _SECURE_SCL를 뜻하는 것으로 원래 SCL은 기본은 1인데, 최고 스피드를 위해서 수동으로 SCL0으로 설정한 것입니다. VC10 VC11에서는 기본으로 _SECURE_SCL 0으로 되어 있습니다.

 


표의 출처는 MSDN입니다^^




저작자 표시
신고
by 흥배 2012.07.12 09:00

BOOST_COMPILER 라는 지시어를 사용하면 컴파일러 종류와 버전을 알려줍니다.



#include <iostream>
#include <boost/config.hpp>

int main()
{
    std::cout << BOOST_COMPILER << std::endl;
    return 0;
}





출처 : 인터넷 어딘가에서....-_-;

저작자 표시
신고
by 흥배 2012.07.09 09:00

예전에  http://jacking.tistory.com/154 이 글을 통해서 간단하게 VC++의 연관 컨테이너의 성능을 테스트해 본적이 있습니다.

그 때는 VC++ 9 환경에서 테스트를 했는데 이번에는 VC++ 11(RC)에서 테스트 해 보았습니다.

그때 사용했던 코드를 거의 그대로 사용했습니다(그래서 손 볼 것이 좀 있습니다^^;)


성능은 역시나(?) CAtlmap이 제일 빠릅니다. 또 unordered_map이 이전에 비해서 많이 빨라졌네요

일전에 VC++ 팀 블로그에서 성능이 개선되었다고 하던데 맞네요


코드를 올리니 혹시 관심 있는 분들은 좀 더 다양하게 테스트 해보시고 공유 부탁합니다^^





ContainerPerformance.zip


저작자 표시
신고
by 흥배 2012.07.05 09:00

드디어 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

이로써 큰 고민을 하나 해결 되었네요^^

저작자 표시
신고
by 흥배 2012.06.28 09:00