2008-09-27 6 views
9

저는 많은 사람들이 2001 년에 C#으로 전환 할 때까지 C++ 개발자 (주로 ATL/COM 제품)였습니다. 그 이후로 많은 C++ 프로그래밍을하지 않았습니다.C++ 기술을 되 살리는 방법

내 C++ 기술을 소생시키는 방법에 대한 조언이 있으십니까? 지난 몇 년 동안 C++에서 변경된 사항은 무엇입니까? 그 언어를 다루는 좋은 책, 기사 또는 블로그가 있습니까? 문제는 내가 찾을 수있는 대부분의 자료는 언어에 익숙하지 않은 사람들이나 많은 경험을 가진 사람들을 대상으로한다는 것입니다.

요즘 어떤 C++ 라이브러리가 인기가 있습니까? 나는 그것을 많이 사용하지 않았기 때문에 STL을 읽을 필요가 있다고 생각합니다. 또 뭐야? 후원? ATL? WTL?

답변

8

개인적으로 구문은 내가 오랫동안 사용했던 언어로 돌아 왔을 때 따라 잡아야한다는 것을 알게되었습니다. 그러나 개념과 언어가 무엇인지는 메모리에서 동일하게 유지됩니다.

너와 똑같이 가정하면, C++을 배우는 동안 당신이 유용했던 것을 기억하는 텍스트를 다시 볼 수있다. 나는 C + +에서 구문에 빨리 일어나서 생각하고 recommned 것입니다.

STL이 정말 유용합니다. 그 중 하나는 내가 일반적으로 모든 성숙 C + + 프로그래머에 의해 평가 발견했습니다. Boost가 제공하는 라이브러리를 아는 것이 유용 할 것입니다.

C++ 세계의 변화는 좋아하는 컴파일러가 구현하기로 결정한 변경 사항에 달려 있습니다. 당신이 ATL/COM 언급했기 때문에 그것은 VC++ 될 것이라고 가정합니다. MFC의 변경 사항은 Windows Forms (2005 vC++) 및 Vista 호환 UI 및 리본 지원 (?) (2008 VC++)

VC++은 이제 관리되는 C++를 지원합니다. C# world - 2008에서는 관리되는 STL에 대한 지원도 추가되었습니다.

VC++는 더 표준을 준수하려고 노력 중이며 해당 영역에서 약간의 진전을 이루고 있습니다.

strcpy와 같은 오래된 std를 줄이는 많은 보안 기능을 도입했으며 컴파일러는 이전 fns를 사용하는 경우 경고를 표시합니다.

VC++ 2005에는 매개 변수를 설명하는 데 사용되는 함수 속성이 있습니다. 매개 변수를 전달할 때 입력에 대해 더 많은 검사를 수행 할 수 있고 경고가 표시되면 정적으로 경고를 표시 할 수 있습니다. 우리 가게는 2005 년 컴파일러 사용으로 발전하지는 않았지만 Usefuli는 말할 것입니다.

MSDN에는 각 릴리스의 주요 변경 사항 목록이 있습니다. Oh & 2005 년 버전의 VC++에서 Windows 95, Windows 98, Windows Millennium Edition 및 Windows NT 4.0에 대한 지원이 제거되었습니다. 또한 지금까지 필요한 핵심 라이브러리 (CRT, ATL, MFC 등)는 이제 사이드 모델 어셈블리를 공유하고 매니페스트를 필요로하는 새로운 배포 모델을 지원합니다.

이 링크는 당신이 가야한다 - http://msdn.microsoft.com/en-us/library/y8bt6w34.aspx

2008, 더욱 Tr1 내지 권장처럼 등 열기 헌병 지원도 향상되었습니다 새로운 프로세서 아키텍처에 대한 더 optimizning 컴파일러, 병렬 컴파일 (/ MP) 지원을 추가 이 버전 중 하나가 내가 기억하는 것입니다.

다시 MSDN을 참조하십시오. - 모든 대답에 대한 suthentic source입니다.

행운을 빈다.

+0

종합적인 답변을 제공해 주셔서 감사합니다. –

+0

/mp는 2005 년에도 기록되어 있습니다. – geocoin

+0

언어는 2001 년 이래로 조금만 진화했을 수도 있지만 작성 방법은 완전히 바뀌 었습니다. 결과적으로이 대답은 대부분 잘못되었다고 생각합니다. -1 –

4

당신의 C++ 기술을 선명하게하기 위해서 나는 아직도 당신이 오래된 C++ 코드에 접근 할 수 있다면 그것으로 갈 것을 권한다. 다시 방문하면 C#으로 전환 한 후 잠복 해 있던 뇌의 일부가 트리거됩니다. :)

라이브러리의 경우 STL이 좋으면 부스트합니다. 나는 2001 년에 당신이 알고 있던 것에서부터 ATL/WTL로 진행되는 새로운 것들이 너무 많다고 생각하지 않는다.

4

단지 프로젝트를 시작하기 만하면된다. 사용하는 라이브러리는 프로젝트에 따라 다르지만 확실히 STL을 읽어야합니다. 오랫동안 C++을 사용하지 않았다면 템플릿에 대해 더 자세히 알아야 할 것입니다.

3

처음에는 Mac과 Windows 또는 Linux 및 Windows에서 작동하는 코드를 작성해보십시오. 이렇게하면 Visual C++에서 벗어날 수있는 C++ 코드 유형보다 훨씬 더 이식성이 뛰어난 코드를 작성할 수 있습니다. 크로스 플랫폼으로 갈 때 매우 다른 많은 미세한 점이 있습니다.

나는 ANSI C++ 게임을 완벽하게 수행 할 수 있다면 지금 도서관에서 멀리 떨어져있을 것을 제안합니다. 또한 C++ 0x에 대한 읽기를 제안합니다. 다음 표준이 곧 발표 될 예정이며 그쪽으로 나아가는 데 도움이 될 것입니다. 이를 위해 STL (구현이 아닌 개념)과 템플릿을 다듬습니다.

부스트를 사용하고 싶다면, 사용하지 말고 일반적으로 얻을 수 있습니다. 그 이유는 필자가 템플릿을 사용하는 이유는 템플릿이 필요한 작업을 수행하는 데 사용 되었기 때문입니다. 새로운 표준이 도입되면 훨씬 더 쉽게 될 것입니다.

업데이트 : STL에 익숙하고 STL과 많은 코드가 필요한 작업을 시작하거나 너무 까다로운 경우 BOOST로 넘어갑니다. BOOST에 책을 사서 읽고 그것을 이해하십시오.

10

Boost - 비록 다른 라이브러리가 그 당시에는 비교적 최근에야 비로소 큰 비중을 차지했습니다. Google TR1 및 C++ 0x 표준도 지원합니다. 당신은 defintely STL에 (IMHO) 때문에 C + + 특별하게 만드는 일을해야한다.

ATL은 잘 죽은 기술입니다 (잘못 입력하지 않아도 좋았지 만 여전히 다소 사용했지만 MS 세계에서는 더 이상 유행하지 않았습니다).

QT와 비슷한 것은 아마도 C++ 개발자에게 더 새롭고 멋지 며 앞으로 몇 년 동안 인기가 높아질 모든 새로운 Linux 및 웹 개발에 당신을 끌어들일 수있는 장점이 있습니다.

그러나 일단 내가 할 수있는 일을 살펴보면 모든 것이 아주 빨리 되돌아 올 것이라고 생각합니다.

2

코드의 일부를 가져 와서 추가하십시오. 이것은 최신 C++ 트렌드를 다시 얻지는 못하지만 발을 젖게 할 것입니다.

제 직업에서는 C++ ActiveX 컨트롤에 몇 가지 기능을 추가해야했지만 수년과 수년 동안 C++을 사용하지 않았으며 전문적으로 해본 적이 없었습니다. 그것을 다시하는 방법을 알아내는 것은 실제로 꽤 지긋 지긋했습니다.

2

비슷한 상황이었습니다. 2005 년 C++에서 C#으로 전환 한 다음 2007 년 C++로 다시 전환했습니다. C++ 우주가 실제로 2 년 동안 변화했다고 말할 수는 없습니다. 가장 중요한 것은 기억 관리 본능을 회복하는 것이 었습니다. 그러나 그것은 연습을 통해서만 가능합니다.

이제 C++ 및 .NET이 모두 갖추어 졌으므로 C++ CLI (조금 늦게 "Managed C++"의 새 화신)를 공부하는 것이 좋습니다.

책의 경우 표지에 "Meyers"및 "Sutter"가있는 모든 것을 읽으십시오.

+0

심지어 MS도 자신과 C++ CLI 사이에 거리를 둡니다. –

3
는 확실히 스콧 마이어스에 의해 "효과적인 C++"의 최신 버전을 읽을
+0

100 % 동의합니다. 나는 이것을 매우 유익한 것으로 생각했다. – ApplePieIsGood

5

C++

사용하여 C#을 물건의 일부를 다시 작성

. 또한 "C++ Gotchas : 코딩 및 디자인의 일반적인 문제 예방"(Stephen C. Dewhurst)을 권하고 싶습니다.

+1

이 답변도 작성했습니다. 아주 좋은 책, 깊이있는 C++ 지식 – anhoppe

4

픽업 C++ 유닛 테스트 프레임 워크 중 하나 (저기 Google C++ Testing Framework, gtest 제안). 처음부터 시작할 수있는 작은 프로젝트를 선택하고 TDD을 시도하십시오. TDD는 작은 단계를 밟아 코드에 반영하도록 권장합니다. 또한 단위 테스트 스위트를 빌드 할 때 다양한 기술을 실험 할 수있는 기반을 제공합니다.

관련 문제