Visual Studio 2008 로 C/C++ 공부 시작하기 by 신동호

많은 사람들이 열정을 가지고 C/C++ 에 도전을 하지만 C/C++ 이라는 녀석이 생각보다 녹록치가 않아서 정복까지는 고된 여정이 기다리고 있습니다. 


본 문서는 처음 C/C++ 에 도전하는 도전자들을 위하여 MS 에서 제공하는 최신 컴파일 환경인 Visual Studio 2008 에 대해 간단히 알아보고, vs2008 의 기능을 이용하여 어떻게 문제를 분석하고 해결할 수 있는지에 대하여 간단하게 정리하고 있습니다.




일러두기




본 문서는 Visual studio 2008 을 기준으로 설명하고 있지만, vs6, vs2003, 이클립스 등 다른 IDE(통합개발환경) 에서도 대부분 사용할 수 있는 내용입니다. 물론, 메뉴 구성이나 환경설정의 모양은 제각각이겠지만요:D




새로운 프로젝트 만들기




책에 나와있는 예제 따라하기

좋은 책을 아직 구입하지 못하셨다면 이전에 제가 썼던 링크가 도움이 될 지 모르겠군요.  http://aronze.egloos.com/642639#642639_1

적당한 책을 구입하셨으면 이제 예제를 따라해 보겠습니다. 예, 저는 지금 지긋지긋한 hello world 를 한번 더 타이핑 하려고 하고 있습니다. 이 예제를 통해서 저는 hello world 를 100번 해본 남자가 되는 겁니다.

visual studio 2008 을 실행합니다. 

[ File > New > Project.. ] 를 선택합니다. 단축키를 잘 봐두세요. 옆에 Ctrl+Shift+N 이 보이시죠? 이것이 단축키 입니다. 이거 저거 누르는게 번거로우시면 한번에 눌러주시면 됩니다. 스타크레프트를 해보셨다면 좀 더 쉽게 배울 수 있습니다:D 단축키는 그때 그때 부담없이 눈여겨 두셨다가 한번씩 해보시면 금방 배울 수 있습니다. 아무리 외우는 것을 싫어 하는 분이라고 하더라도 100 번정도 이 작업을 반복하다 보면 귀찮아서라도 외워질 겁니다. - 간혹 10년째 클릭만으로 스타크래프트를 즐기는 분들도 계시긴 하더군요.


우리가 만들 프로젝트는 콘솔 어플리케이션이라는 녀석입니다. 간단하게 도스창 띄우고 실행되는 프로그램이라고 생각하시면 무난합니다. 

아래 Name 은 프로젝트의 이름을 설정하는 곳입니다. 저는 200904011053 이라는 이름을 주었습니다. 사실 이런 이름은 제가 애용하는 방법인데 여러분께만 살짝 비기를 전수해 드리죠. 오늘 정말 잘 오신겁니다.

여러분은 앞으로 엄청난 수의 예제를 만들겁니다. 이 녀석들을 잘 관리하는 것은 의미가 없습니다. 하여, 저는 제가 테스트한 시간을 프로젝트의 이름으로 만들어 바탕화면에 둡니다. 이렇게 하면 바탕화면에 이런 숫자로 이루어진 폴더들이 무더기로 생겨나겠지만, 최근에 작업한 녀석들을 구분하기 좋습니다. 우리는 보통 최근에 테스트 했던, 혹은 연습했던 코드를 다시 참조할 일이 많으므로 이전 프로젝트를 보고 싶다고 한다면 시간으로 어느정도 감을 잡을 수도 있겠죠. 머 대충 이런 이유입니다. 특별한 녀석은 마지막에 200904011053_이건지우면안됨 과 같이 적어두곤 하죠.

어느 날인가 부모님께서 바탕화면 좀 청소하라고 야단을 치신다면 이상한 숫자로 이루어진 폴더를 긁어서 간단하게 휴지통으로 보내면 됩니다.

다음에는 윈도우 어플리케이션 위저드라고 또 다른 창이 뜰겁니다. 프로젝트의 세부 설정을 하는 곳이죠. 첫 화면에서 Ctrl+Tab 키를 누르시거나 옆에 Application Settings 를 클릭합니다.

아래 Additional option 에 precompiled header 에 체크가 되어 있습니다만, 우리는 사용하지 않을 겁니다. Empty project 를 선택하면 아래 체크는 자동으로 무효화가 됩니다. 모든 설정이 끝났으므로 finish 를 클릭합니다.

좌측에 solution view 를 보세요. 이 녀석은 앞으로 자주 보게 될 녀석이니 미리 친해두시는 것이 좋을 겁니다. 저는 빌게이츠가 만들어준 폴더 구조가 마음에 들지 않아서 지웠습니다만, 이건 본인의 취향이므로 따라하지 않으셔도 됩니다.

 

한 가지 주의하셔야 할 부분이 있습니다. Solution view 에서 보여주는 폴더 구조는 실제 폴더 구조와 다를 수 있다는 점입니다. 추천하는 것은 이 구조를 수동으로 맞추시라는 것입니다. 실제로 다른 진영의 최신 IDE 는 이와 같은 기능을 지원하는데 유독 visual studio, 그것도 c++ 쪽에만 안되는 것 같습니다. 수동으로 해줍시다.

이제 main.cpp 를 추가하겠습니다. 프로젝트를 선택하고 오른쪽 클릭을 해서 add > new item.. 을 클릭합니다. C++ File 로 main.cpp 를 추가합니다.

 
이제 코드를 입력해야 겠군요. 


Tab 간격 맞추기

이번 내용은 중요한 내용이 아닙니다만, 알아두시면 도움이 되는 내용입니다. Tab 문자라는 것을 혹시 알고 계신가요? '\t' 라는 녀석 말이죠. 공백문자는 1칸 띄어쓰기를 하는데 사용하지만 '\t' 문자는 여러칸 띄어줘라 라는 의미를 가지고 있습니다. 그렇다면, 여러줄이라는 것은 몇 칸을 의미할까요? 예, 엿장수 맘데로 입니다. 거짓말 같으시면 어떤 편집기든 열어서 텝 키를 눌러 보세요. 메모장은 윈도우를 깔고 아무 설정도 안한 경우 8칸을 띄워 버립니다. 생각을 연장시켜 보죠. 여러분이 이쁘게 줄간격 맞춰서 코딩을 했는데 말이죠. 텝키를 사용할 수도 있고 아닐수도 있는데 말이죠. 

    int a;
    int b;

와 같이 했는데 위에는 텝키를 누르고 입력했고, 아래 줄은 스페이스바를 네번 눌러서 입력을 했는데 이걸 메모장에서 보면

        int a;
    int b;

와 같이 보인다는 것입니다. 그야말로 대 재앙이죠. 이런 코드를 누군가에게 가져가면 이쁜 코딩을 목숨과 같이 생각하는 어떤 분들은 눈살을 찌뿌릴 수도 있습니다. 저같은 사람이 분명 또 있다는 말입니다.

해결 방법이 있습니다. 텝 키를 눌렀을 때 자동으로 공백문자 4개가 들어가게 하는 방법이죠. 이렇게 하면 모든 문제가 사라집니다.어떤 에디터에서 보아도 여러분의 코드는 가지런히 정렬되어 있을 겁니다.(무식한 폰트를 사용하는 환경을 제외하고 말이죠. 어떤 폰트는 문자 간격이 일정치가 않아서 줄 맞추기가 힘듭니다. 따라서 미적 감각이 훌륭한 개발자 들은 폰트의 간격이 일정한 녀석들을 사용합니다. 다행이도 visual studio 2008 등 IDE 를 만든 분들이 이런 내용을 알고 있어서, 기본 폰트를 사용하는 것으로 무리가 없습니다.)

이 부분이 keep tabs 로 되어 있을 겁니다. insert spaces 로 바꾸어 줍니다. 공백의 갯수는 암묵적으로 4 칸이 적당하다고 알려져 있습니다.

이제 main.cpp 로 돌아와서 아무데서나 텝 키를 눌러보세요. 공백 4개가 들어간 것이 보이시나요?




실행해 보기




F5 로 실행하기

서론이 길었군요. 프로그램을 실행해 봅시다. 메뉴의 [ Debug > Start debugging ] 을 선택하시거나 간단하게 F5 키를 누르시면 프로그램이 실행됩니다. 물론, 빌드를 하고 링크를 하고 실행을 하겠지요. 중간에 빌드 할꺼삼? 이라는 메시지가 나오면 yes 를 눌러줍니다. 

도스창에 늠름하게 찍힌 hello world 를 생각했는데, 먼가 순식간에 지나가 버렸군요. 여러분의 나이가 어리다면 눈을 잘록하게 뜬 체로 모니터를 뚤어져러 보시면 hello world 를 볼 수 있을 지도 모릅니다. 하지만, 저는 나이가 있어서 순식간에 지나가는 글자를 도저히 볼 수가 없군요. 다른 방법을 사용해 보죠.

Ctrl+F5 로 실행하기

ctrl+F5 를 눌러보세요. F5 와 마찬가지로 [ Debug > Start without debugging ] 을 선택하여 실행할 수도 있습니다.

메뉴에 써져 있는 이름에서도 알 수 있듯이 F5 와 Ctrl+F5 는 디버깅을 같이 할 것이냐 아니냐의 차이가 있습니다. 디버깅에 대한 자세한 내용은 아래 살펴볼 것이지만, 궁금하신 분들을 위해 간단하게 설명해 보겠습니다.

F5 를 누르면 디버깅을 시작합니다. 디버깅이 시작되면 visual studio 가 우리가 사용한 코드를 물고 들어가면서 여러가지 못된 짓들을 함께 합니다. hello world 를 콘솔창에 찍고 마지막 return 0; 을 만나는 순간 프로그램은 종료됩니다. 이때 visual studio 의 디버깅도 종료되는 것이죠. 하지만 ctrl+F5 를 누르면 디버거를 물고 실행하지 않고 콘솔을 하나 띄워서 이 녀석에게 우리가 만든 프로그램의 실행을 전임합니다. 프로그램이 종료가 되었어도 visual studio 는 콘솔 창을 직접적으로 끄지 않습니다. 따라서, 우리의 프로그램이 끝났음에도 콘솔창이 살아있어 결과를 확인할 수 있는 것이죠. 

Shift+F5 로 실행 종료 하기

프로그램 실행 중 혹은 디버깅 중에 그냥 프로그램을 종료하고 싶은 분이 계실 것 같군요. 간단하게 shift+F5 를 눌러주세요. 이게 어디 메뉴에 있는지는 직접확인해 보시고요.

Output view 로 결과 확인해 보기

Output view 는 매우 중요한 녀석입니다. 빌드 및 링크의 내용을 이 창을 통해 알 수 있습니다. 사실 Output view 에는 좀 더 많은 비밀이 있는데요, OutputDebugString 등의 win32 함수를 사용하면 잡아체서 자신의 창에 뿌려준다든지 머 그렇고 그런 이야기 입니다.

Output view 를 사용해 보기 위해서 코드에 에러를 하나 넣어보겠습니다. 간단하게 printf 다음 줄에 a = 0; 이라는 구문을 넣어보죠. a 라는 변수를 정의를 안했으니 에러를 떨궈줄 것으로 기대됩니다.


빌드해 보면 에러가 하나 생겼습니다. 빌드 단축키는 Ctrl+Shift+B 입니다. 메시지의 내용을 라인별로 보죠.

1. 빌드를 시작합니다. 프로젝트 이름이..? 200904011053 이시군요. Debug Win32 설정으로 빌드하려고 하시나봐요.
2. 컴파일 합니다.
3. main.cpp 를 먼저 컴파일 합니다.
4. main.cpp 를 컴파일 하다 보니 C2065 라는 에러가 발생했습니다. C2065 에러는 알 수 없는 변수 a 를 사용했기 때문에 일어났습니다.
5. 이런 저런 경로에 로그를 남겨두셨는데 정말 시간이 남으시면 살펴 보시죠.
6. 2009.. 프로젝트의 최종 결과를 보고합니다. 1개 에러 있고요, 경고는 없습니다.
7. 전체 솔루션의 최종 결과를 보고합니다. 빌드 성공한 녀석은 없고요, 한개 프로젝트 실패했습니다.

이제 어디서 문제가 발생했는지 알게 되었군요. 에러가 난 부분을 더블클릭 해봅시다. 따-란!! 오류가 난 코드로 이동했습니다. 이제 더 명확해 졌죠. 

a = 0;

여기서 에러가 났는데 에러 메시지는 a 라는 변수 나는 모르겠소 입니다. 앞에 int 를 붙여

int a = 0;

으로 만들어 주고 다시 빌드합니다. 잘 되는군요:D 사실 Output view 는 불편한 점이 좀 있습니다. 여러 메시지가 다 모여 있어서 말이죠. 경고 메시지가 1000 개 정도 있고 에러 메시지가 1개 있다면? 상상만으로도 짜증이 밀려오는군요. 수 많은 경고의 바다에서 에러를 찾아야 합니다. 이런 불편을 덜기 위해 에러와 경고만 모아서 볼 수 있는 view 가 있습니다.

메뉴의 [ View > Other windows > Error list ] 가 바로 그 view 입니다. 좀 전 에러를 error list view 를 통해 보면 다음처럼 명확하게 볼 수 있습니다.

친절하게 에러가 난 파일과 라인까지 표시해 줍니다. 위에 보면 error, warnings, messages 라고 있고 error 만 선택된 것 처럼 네모 박스가 쳐져 있는 것이 보이시나요? error 를 클릭해 보시면 error 내용이 안보이게 됩니다. 반대로 경고(warnings)가 산더미 처럼 있어서 에러만 보고 싶으신 경우, 위 화면처럼 경고를 클릭하여 비활성화 시켜두면 편리합니다.




디버깅 해보기





브레이크 포인트(F9)로 디버깅 하기

우선 브레이크 포인트가 뭔지 설명을 좀 드려야 할 것 같군요. 앞서 hellow world 를 보셨죠? 컴퓨터가 신나게 여러분의 코드를 실행하고 프로그램이 끝났더니 종료해 버렸습니다. 하지만 살다보면 이런 일도 있습니다. 실행하다가 잠깐 요기서 멈춰봐. 내가 한번 살펴 봐야겠어. 같은 상황 말이죠. 예를 들어, 간단한 프로그램을 만들었는데 실행은 잘되는데 어딘가 꼬였는지 이상하더라, 그렇다면 이상한 부분에 브레이크 포인트를 찍어 주시고, 살펴 보는 거죠.

브레이크 포인트를 거는 방법은 간단합니다. 원하는 코드로 커서를 이동시키고 F9 를 누르는 것이죠. 브레이크 포인트가 잘 걸렸으면 옆에 빨간 점이 찍힐 겁니다.

 여러분을 위해 새로운 예제를 만들어 봤습니다. 잘 모르는 부분은 대충 넘어가시고 핵심만 집고 넘어가시기 바랍니다. 브레이크 포인트 잘 찍히셨나요? 그럼 넘어가죠-_-

이제 F5 를 눌러보겠습니다. 아까 F5 가 뭐라고 했는지 혹시 기억나시나요? 예, Start debugging 입니다. Ctrl+F5 로 하면 visual studio 의 디버거를 물고 들어가지 않으므로 반듯이 F5 로 실행해야 합니다. 브레이크 포인트에서 프로그램이 멈췄나요?


이제 array 위에 마우스를 올려 보세요. visual studio 2008 은 이와 같이 바로 변수에 들어있는 값을 알 수 있는 막강한 디버깅 기능을 지원합니다.

F10, F11, Shift+F11 로 심층 디버깅 해보기

이번에는 위 코드를 단계별로 분석해 보겠습니다. 10칸짜리 배열을 하나 만들고 0으로 다 초기화 한 다음에 각각 배열의 인덱스와 동일한 값을 넣어주었다.. 를 직접 보자는 것이죠. 이 과정을 모두 지켜보기 위해서 브레이크 포인트를 좀 더 위로 올려야 겠군요.

F10, F11, Shift+F11 을 설명하기 위해서 코드를 좀 더 확장해 보았습니다.

F5 를 눌러서 프로그램을 실행합니다. 브레이크 포인트에서 프로그램이 멈췄나요? 다시 F5 를 누르면 중단된 곳에서 부터 프로그램이 계속 실행되어 프로그램이 종료되어 버릴 지도 모릅니다. 우리가 원하는 것이 아니죠. 한줄만 실행해 보고 싶은데.. 간단합니다. F10 을 누르세요. 

array 위에 마우스 커서를 올려놔 보세요. 먼가 값이 뜨죠? 배열이기 때문에 확장도 가능할 겁니다. 십자가 버튼같은게 생길 겁니다. 누르면 array 가 10 칸으로 설정되었고 안에 있는 모든 값들이 0 으로 초기화 된 것을 확인할 수 있습니다. 이런 방법이 불편하다면 watch view 를 사용하는 방법이 있습니다.

watch view 는 local view, auto view 와 더불어 변수의 값을 보는데 유용한 도구인데요. 메뉴에 [ debug > windows ] 쪽에서 키고 끄고 할 수 있습니다. 주의할 점은, 이 녀석들은 매우 비밀스러운 녀석들이라 평소에는 안보이고 프로그램이 실행되어야만 활성화가 됩니다. 실행안하면 메뉴에도 안보이죠.

사용법은 의외로 간단합니다. 나머지 녀석들은 그냥 보고만 계시면 이해가 될 겁니다. watch view 는 변수를 드레그하여 선택한 후 watch view 에 드롭 하면 됩니다. 아니면 간단하게 watch view 를 클릭하여 arrray 와 같이 원하는 변수를 입력해도 같은 기능을 하게 됩니다. 

공부를 하시다 보면 혹은 프로젝트를 진행하다 보면, 가끔씩 값들을 hex 값으로 확인하는 것이 더 편리할 때가 있습니다. 그런 경우,

요걸 선택해 두면 모든 값이 16 진수로 보이게 됩니다.

다시 본론으로 돌아가죠. initArray 까지 프로그램이 실행되었었죠? 함수안으로 들어가야 하는데 말이죠. 여기서 다시 F10 을 눌렀다가는 함수가 다 실행되어 버릴 겁니다. 잊지 않으셨죠? F10 은 한 줄씩 프로그램을 실행한다 입니다. 현재 위치에서 함수는 한줄로 되어 있으므로 그냥 통으로 실행되는 결과를 낳을 겁니다. 함수 안으로 들어가고 싶은데..

F11 을 누르세요!! 이 녀석이야 말로 진정한 한줄씩 프로그램을 실행해 주는 녀석입니다. 함수를 만났는데 그 함수가 여러줄로 되어 있다면? 들어가서 한줄씩 실행하죠. F10 과 F11 을 적절하게 잘 사용해서 실행하거나 쭉~ 저쪽까지 가고 싶으면 F9 로 저쪽에다가 브레이크 포인트를 걸고 F5 로 거기까지 날라가서 다시 보고, 뭐 대충 이런 사이클이 되겠네요.

함수로 들어가서 F10 으로 array 가 초기화 되는 것을 살펴보다 보니, 및에 blah blah 를 만났습니다. 살펴볼 필요가 없는 녀석이죠. 이 함수를 탈출해야 겠군요. Ctrl+F11 을 눌러주면 함수를 빠져나갈 수 있습니다.

Call stack view 사용해 보기

이정도 되었으면 무슨 무슨 view 는 도사가 되셨겠군요. 자주 이용되는 view 를 몇 개만 소개하고 이만 글을 줄이겠습니다. debug > windows 쪽에 call stack 이라는 view 가 있습니다. 어떤 함수가 어떤 경로로 호출되었는지를 알려주는 녀석이죠. 공부를 열심히 하실수록 더욱 자주 신경써야 할 녀석입니다. 비정상적으로 프로그램이 종료된 경우에도 요긴하게 활욜할 수 있습니다. call stack 을 보면 어떤 경로로 이 함수가 실행되어 죽게 되었는지 일련의 과정을 확인할 수 있거든요.

기타 memory view 가 debug 쪽에 있는데요, 관심 있는 분은 watch 쪽으로 array 를 옴겨서 확인해 보시고 옆에 watch 라는 변수의 주소를 복사해다가 memory view 쪽에 붙여넣어 보세요. 실제 메모리의 모양을 적나라하게 볼 수 있습니다. 



트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://aronze.egloos.com/tb/1357178 [도움말]

덧글

  • Chan 2009/04/01 15:48 # 삭제 답글

    2005와 2008은 거의 비슷해서. 쓰기 쉽더라구요. ㅎ

    노트북에 2008을 깔았다가 느무느무 느려서 2005로 바꾼 1人
  • 신동호 2009/04/01 17:06 # 답글

    2009년 첫 번째 덧글! 짝짝
  • Eminency 2009/04/02 01:51 # 삭제 답글

    오오, VC++ 초보인 -_- 제가 봐도 잘 설명된 글이군요.
    훌륭하십니다. 저는 게을러서 이런 건 도저히...ㅡㅡ

    * 참 저는 아실지 모르겠지만 코드인의 씨어입니다.
  • 신동호 2009/04/02 09:27 # 답글

    ㅎㅎ 방갑습니다 씨어님이시군요 :D 저도 귀찮았는디 이 내용과 엮인 중복 질문이 너무 많아서 ㅠ 큰맘먹고 정리했네요
  • Chan 2009/04/02 23:21 # 삭제 답글

    방명록이 없어서. ㅎㅎ. 여기다가. ㅋ.
    RSS등록 완료입니다. ㅎㅎ
  • 신동호 2009/04/03 09:33 # 답글

    핫; 가문의 영광입니다:D 즐건 하루 되세요~
  • gary 2009/06/21 00:46 # 삭제 답글

    정말 감사합니다.
  • 신동호 2009/06/21 02:14 # 답글

    도움이 되셨다면 좋겠네요;; 즐건하루 되세요:D
  • lmk 2009/11/29 15:14 # 삭제 답글

    코드인 카페에서 보고 왔습니다.
    담달부터 신입 개발자로 일하게 됐는데
    vs 2008을 사용한다 더라구요 ㅜㅜㅜ
    해서 도움이 될까해서 구경왔습니다 ^^;
    설명을 너무 잘해놓으셨어요 ㅎㅎ
  • 신동호 2009/12/03 17:21 # 답글

    ㅎㅎ; 도움이 되셨다니 다행이네요; 즐건 개발되세요~
덧글 입력 영역