메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

C++ 언어의 시시한 역사

한빛미디어

|

2002-02-18

|

by HANBIT

11,817

저자: 한동훈

읽기 전에

인터넷에서 우연히 이 글이 있는 것을 보았다. 97년도나 98년도 쯤에 작성했던 글로 기억하지만 필자는 원고를 전혀 갖고 있지 않다. (불의의 사고로 2년이상 개발했던 코드들과 모든 문서를 잃어버린 기억이 있다. - 백업 잘 하고 삽시다!)

다시 읽어보니 처음 프로그래밍 언어를 접하는 분들에게는 적합할 것이라 생각한다. 처음에 이글은 C 언어에 대해서 쓰여졌으며, 그 다음에 C++ 언어에 대하여 썼다. 이글은 KCA(건국대학교 컴퓨터 동아리)에서 연구부장을 할 때 후배들을 위해서 작성했으며, 몇몇 예제와 Q&A는 다른 곳에서 빌려온 것임을 밝힌다.

막연히 C 언어나 C++를 어렵게 생각하는 분들에게 도움이 되었으면 좋겠으며, 요즘(?)에 맞게 약간 수정했다.(실은 거의 안했다 ^^;)

이 글을 작성할 때만해도 필자는 볼랜드 C++를 주 개발툴로 사용하고 있었기 때문에 중간중간에 나오는 통합 개발 환경(IDE)에 대한 이미지는 볼랜드 C++에 대한 것이다. 그러나 글의 마지막에 각 컴파일러별 컴파일 방법을 설명해 두었다.

C++ 언어의 시시한 역사

처음에는 B언어라는 것이 있었습니다. 그 다음에 C언어가 개발되었습니다. 이 언어는 AT&T Bell 연구실에서 개발되어 세상에 공개된지 10년만에 너도나도 쓰는 언어로 자리잡았습니다. 10년이 지난 후 사람들은 자신들이 늘 똑같은 문제에 대해서 똑같은 작업을 하고 있다는 것을 알았습니다. 블록을 쌓아가듯이 하나하나 만들어서 쌓아가면서 말입니다. 프로그램은 점점 더 커져갔고 그것을 관리하기는 더욱더 복잡해져갔습니다.

이렇게 복잡해진 문제를 조금은 더 쉽게 할 수 없을까, 프로그램의 유지, 보수에 들어가는 시간을 줄일 수는 없을까 하는 생각에서 C++이 탄생하게 되었습니다.

C언어와 C++은 어떻게 다른가요?

C언어가 유행하던 시절에 구조화된 프로그래밍에 회의를 느낀 사람들은 객체중심의 프로그래밍에 관심을 돌렸습니다. 객체중심의 생각을 C언어에 적용시킨 것이 C++입니다. C언어에 객체중심의 개념을 더했다고 하여 C++이라 이름붙이게 됩니다. C++은 C언어의 모든 것을 포함하고 있습니다. C와 C++을 별개의 것으로 구분하는 사람들도 있고, 특별히 구분하지 않는 사람들도 있습니다. 이것은 전적으로 여러분의 자유입니다. C로서 철저하게 프로그래밍을 할 수도 있고, C++로만 철저하게 프로그래밍을 할 수 있습니다. 그러나 많은 사람들은 C와 C++을 혼합하여 쓰고 있습니다. 고집스럽게 하나 만을 고집하는 사람은 정말이지 어디에서도 쓸 데 없다니까요!
  • 많은 윈도우 프로그래머들이 MFC(Microsoft Foundation Classes)를 이용하여 윈도우 프로그래밍을 하고 있습니다. 객체중심의 윈도우 클래스 라이브러리라고 알려진 MFC도 실상은 70%의 C코드와 30%의 C++코드로 이루어져 있습니다.

  • 소수의 윈도우 프로그래머들이 OWL(Objected Windows Library)을 이용하여 프로그래밍을 하고 있습니다. 이것은 100% C++코드로 작성되었습니다.
객제중심이 뭐길래....

많은 사람들은 객체중심이라는 말을 들으면 머리를 쥐어 뜯으며 "난 안돼!"라고 외칩니다. 너무 강박관념을 가지고 공부하려고 하지 마세요. 그냥 즐거운 마음으로 시작해야 합니다. 지금 여러분은 특별한 이용자가 아니라면 윈도우95를 사용하고 있을겁니다. 이 강의를 보기 위해 "한글"을 실행시키고 File Open을 해서 보는 사람이 있는가하면, 이 문서위에 마우스 커서를 갖다대고 당연하다는 듯이 두 번 누르는 사람도 있습니다.(여러분은 어느 쪽인가요?)

"한글"을 먼저 실행시키고 문서를 불러오는 사람은 구시대 C프로그래머들이 하는 방법입니다. 프로그램을 실행시키는 법을 알아야하고 문서를 불러오는 방법을 알아야만 문서를 볼 수 있습니다.

문서를 두 번 누르는 사람은 자신의 PC에 "한글"이 설치되어 있기만 하면 프로그램의 실행법을 알 필요도 없고, 문서를 불러오는 법을 몰라도 됩니다 그래도 문서를 보는데 아무 문제가 없으니까요. 문서는 여러분이 이용하는 수 많은 객체들중의 하나입니다. 단순히 문서만 두 번 눌러주면 됩니다. 한글을 사용하는 법을 알 필요가 없습니다. 그림이 보고 싶을 때는 그림을 보는 프로그램만 자신의 PC에 있으면 그림을 두 번 눌러주면 됩니다. 프로그램을 설치하는 법을 알 필요도 없습니다. 프로그램의 사용법을 몰라도 됩니다. 단순히 여러분이 보고자 하는 문서를 두 번 눌러주면 그에 맞는 프로그램이 실행되고 여러분이 원하는 것을 볼 수 있습니다.

MP3, WAV같은 음악을 듣고 싶으면 마우스로 그 파일만 두 번 눌러주면 됩니다. 예, 윈도우95라는 OS는 Document Oriented입니다. 문서 중심의 OS인 것입니다. C++을 흔히 객체중심의 프로그래밍을 할 수 있다고 합니다. 그 말의 의미는 여러분은 그 코드(프로그램)가 무엇을 하는지 알 필요가 없이 이용만 하면 된다는 것입니다. 여러분이 사용하고자 하는 코드의 상세한 것을 몰라도 문제없이 이용할 수 있다는 것입니다. 이것을 흔히 코드 재사용이라고 부릅니다. 그리고 여러분은 보다 빠른 시간에 프로그램을 개발 할 수 있습니다.
  • 객체중심의 프로그래밍의 장점은 단시간에 프로그램을 빨리 개발할 수 있다는 것이지만, 재사용한 코드를 수정하는 것은 무척이나 어려운 일이 되었습니다. 그 코드들의 핵심이 무엇인지 접근할 수 없게 되어있습니다.
객체중심? 객체지향?

C++은 흔히 C언어에 OOP(Object-Oriented Programming)의 개념을 더한 것이라고 말합니다. 그래서 객체지향 언어라고 합니다. 객체지향이라는 것은 "한글"과 같은 워드가 중심이 되어 여러 문서들을 객체로서 다루는 것을 뜻합니다. 객체중심이라는 것은 윈도우95와 같이 문서들을 중심으로 다루는 것을 말합니다. 다만, 객체지향이라는 용어가 널리 쓰이는 것은 OOP라는 개념을 받아들일 때 기인한 오역에 있습니다. 때문에 이 용어를 가지고 혼동을 느낄 필요는 없습니다. 그리고 대부분의 사람들은 객체지향 프로그래밍이라며 떠들고 다니고 있습니다. 여러분이 객체중심이라고 하든 객체지향이라고 하든 문제될 것은 없습니다. 그러나 이 강의는 객체중심이라고 할 것입니다.

C를 배워야 합니까?

많은 C++ 입문서들은 C언어를 이미 알고 있는 사람들을 위해서 쓰여졌습니다. 그러나 이 강의는 컴맹을 위해서 진행됩니다. 때문에 여러분이 컴맹이라는 사실에 안도감을 느껴야 합니다. C언어를 몰라도 됩니다. 이미 C언어를 알고 있다면 "아, 이게 C와 C++의 차이구나"라고 알면 그만입니다. 그러나 모르고 있다면 그것을 C++이라고 알면 됩니다. 이젠 C언어를 공부하는 사람은 많지 않습니다. C++을 공부한 다음에 C를 공부해도 됩니다.

어째, 순서가 뒤바뀐 것 같군요!

C언어를 이미 알고 있다면 C++을 익히는데 어려움이 생길수도 있습니다. C와 C++은 서로 주객이 뒤바뀌어 있기 때문에 두 가지 언어를 한꺼번에 사용한다는 것은 큰 혼란을 초래할 수 있습니다. 모르는 것이 더 좋습니다!

순진하고 철없는 텍스트 파일이 어떻게 프로그램이 되는가.

프로그램을 만들면 프로그래머가 되는 것입니다. 물론 여러분은 아직 프로그래머라는 호칭이 낯설게만 느껴지겠지요. 여지껏 친구들은 그저 Computer Operator, 또는 맹수들을 자유자재로 다룬다고 해도 기껏해야 마술사라는 이름으로 여러분을 부르고 있을 테니까요. 그러니 어서 빨리 프로그래머라는 직함을 명함에 박아놓고 잔뜩 으스대자구요.

아....

이제 여러분은 프로그래머입니다. 그럼 무슨 일을 해야 하죠? 물론, 프로그램을 작성해야죠! 하지만 프로그램에는 목적이 있어야 합니다. 그리고 그 목적이란 바로 컴퓨터로 하여금 어떤 일을 하도록 만드는 것입니다.

C++ 개발 주기

C++ 프로그램을 만드는 과정은 9단계로 나눌 수 있습니다. 이 단계들은 개발 주기라 불립니다.
  1. 프로그램에 대한 아이디어를 구상한다.
  2. 편집기를 사용하여 소스 코드를 작성한다.
  3. C++컴파일러를 사용하여 프로그램을 컴파일한다.
  4. 에러에 대해 비통한 눈물을 흘린다.(선택 사양)
  5. 링커로 프로그램을 링크한다.
  6. 에러에 대해 애통의 눈물을 흘린다.(선택 사양)
  7. 프로그램을 실행하고 테스트한다.
  8. 버그에 대해 머리카락을 쥐어뜯는다.(선택 사양)
  9. 다시 시작한다.(필수 사양)
이 목록을 외울 필요는 없습니다. 이는 마치 샴푸 병에 적힌 안내문과 같습니다. 모두들 샴푸로 머리를 감는 법을 잘 알고 있기 때문에 누구도 굳이 그 안내문을 읽지 않습니다. 머지않아 여러분도 외울 필요가 없을 정도로 이 단계들을 빈번히 밟게 될 겁니다.(하지만 개발 주기에 관해 안다는 것은 멋진 일입니다. C++언어 개발 주기의 고통속에서 헤매고 있다고 친구들에게 우는소리를 한 번 해보세요. 여러분의 프로그래밍 지식에 놀라 눈들이 휘둥그레질 겁니다)
  • 1단계가 가장 어렵습니다. 나머지는 저절로 됩니다. 앞으로 조금만 더하면 정말로 샴푸하는 것만큼이나 쉬워질 것입니다.
소스 코드

프로그램을 만들 때 여러분은 계속해서 컴퓨터에게 무엇을 하라고 지시하게 됩니다. 하지만 컴퓨터는 여러분의 말을 이해할 수 없기 때문에 말로 해봤자 별 소용이 없습니다. 결국 여러분이 택할 최후의 의사 전달 방법은 컴퓨터에게 조그만 편지를 쓰는 것입니다. 그 편지란 바로 파일입니다.

편지를 쓰려면 문서편집기라는 프로그램을 사용합니다. 이것은 워드프로세서의 원시 버전으로서 여기에는 형식화와 인쇄에 필요한 갖가지 멋진 기능들이 빠져있습니다. 즉, 문서편집기는 텍스트를 입력하게 하는 것이 전부입니다.

문서 편집기를 사용하여 소스 코드 파일(source code file)을 만듭니다. 이 파일에 특별한 점이 있다면 바로 컴퓨터에게 무엇을 하라고 지시하는 명령들을 담고 있다는 것뿐입니다. 우스갯소리 하듯이 명령어들을 쓰면 좋기야 하겠지만, 이 명령들은 반드시 컴퓨터가 이해할 수 있는 언어로 작성해야 합니다. 이 경우에는 C++로 쓰여진 명령들이어야 겠지요. 명령을 다 썼으면 그것들을 디스크에 파일로 저장합니다. 그 파일 이름의 앞부분은 여러분이 최종 프로그램에 붙이고 싶은 이름입니다. 예를 들어 UFO Kill이라는 게임을 만드는 중이라면 그 소스 코드 파일 이름의 앞부분은 UFOKILL이어야 합니다. C++ 언어의 경우 파일 이름의 뒷부분, 즉 확장자는 CPP입니다. 이것은 아주 중요합니다. 대부분의 텍스트 파일은 TXT나 DOC로 끝납니다. 하지만 C++ 언어의 파일들은 반드시 .CPP로 끝나야 합니다. 바로 UFOKILL.CPP처럼 말입니다.
  • 소스 코드 파일이란 디스크의 텍스트 파일입니다. 이것은 컴퓨터에 대한 명령들을 담고 있으며 C프로그래밍 언어로 작성됩니다.
소스 코드 파일을 만들려면 문서편집기를 사용합니다. 대부분의 C++ 컴파일러에는 고유의 문서편집기가 딸려옵니다. 만약 여러분의 컴파일러에 그런 것이 없다면 다른 편집기를 사용할 수도 있습니다.

워드프로세서로 소스 코드 파일을 만들 수도 있습니다. 하지만 그런 경우에는 "도스 텍스트"나 "ASCII" 또는 비형식화 파일등 순수한 텍스트 형태로 저장해야 합니다.(워드프로세서를 사용하여 소스 코드 파일을 만드는 것은 보잉747기를 타고 출근하는 것과 같습니다. 간단한 일에 너무 거창한 것을 사용하는 셈이죠)

소스 코드 파일은 CPP로 끝납니다. 즉 파일 이름의 확장자가 CPP여야 합니다.(C언어는 C로 끝납니다) 소스 코드 파일 이름의 앞부분의 최종적으로 만들고자 하는 프로그램의 이름입니다.

컴파일러

소스 코드가 만들어지고 디스크에 저장된 다음에는 컴퓨터가 이해할 수 있는 언어로 번역되어야 합니다. 이 작업은 컴파일러에 의해 수행됩니다.

컴파일러는 소스 코드 파일에 저장된 명령을 읽는 특수한 프로그램입니다. 컴파일러는 각 명령을 이리저리 훑어본 다음 그것을 컴퓨터의 마이크로프로세서만이 이해할 수 있는 비밀 코드로 번역합니다.

모든 것이 제대로 진행되고 컴파일러가 여러분의 소스 코드에 아주 만족해하면 목적 코드 파일(object code file)을 만듭니다. 목적 코드 파일은 소스 코드 파일과 이름의 앞부분은 동일하지만 확장자가 .OBJ입니다. 즉 앞서 말한 UFO게임의 경우에는 UFOKILL.OBJ가 되는 것이죠.

만약 컴파일러가 이해하는 못하는 것이 있으면 화면에 에러 메시지를 내보냅니다. 그러면 여러분은 이를 악물고 앉아서 진땀을 흘리겠지요? 이런 경우에는 다시 소스 코드 파일을 편집하여 컴파일러가 찾아낸 에러들을 고쳐야 합니다. 그런 다음 그 프로그램을 다시 컴파일 합니다. - 재컴파일하는 겁니다.

컴파일러가 임무를 수행한 다음에도 프로그램은 아직 완성된 게 아닙니다. "링크"라는 세 번째 단계가 필요합니다. 이에 대해서는 다음절에서 다룹니다.

Object Code File에 대하여....

목적 파일들은 꼭 필요한 것일까요? 아니오. 그렇지는 않아요. 이들은 중간 단계입니다. 컴파일러는 마이크로프로세서가 바로 이해할 수 있는 기계어 명령들을 소스 코드로부터 만듭니다. 바로 그 시점에서 최종 프로그램을 만들 수도 있겠지만 대신 OBJ파일이 만들어집니다.

OBJ파일의 존재이유는 여러분이 커다란 프로그래밍 프로젝트를 가지고 있을 때 분명해집니다. 이런 경우 여러분은 여러 개의 소스 코드 파일로 작업을 하게 됩니다. 왜냐고요? 우선 프로그램을 다루기가 쉽기 때문이죠. 이를테면 워드프로세서에서 500페이지 분량의 소설을 한 파일로 작업할 수도 있겠지만, 이보다는 장별로 파일을 나누어 다루는 것이 훨씬 편리한 것과 같습니다. 큰 프로그램의 경우에는 조그만 조각들 또는 모듈들로 쪼개는 것이 사리에 맞습니다. 각각의 모듈은 따로따로 쪼개는 것이 사리게 맞습니다. 각각의 모듈은 따로따로 컴파일되어 OBJ파일이 여러 개 만들어집니다. OBJ파일들은 한 EXE파일로 잇거나 또는 링크(link)하는 것이 링커의 임무입니다. 아직 여러분은 C++ 프로그래밍을 시작한지 얼마 되지 않았기 때문에 분리된 소스 파일과 복수의 OBJ파일들이 만들어질 만큼 프로그램이 크지 않을 겁니다. 그렇지만 단 하나의 OBJ파일을 최종 프로그램 파일로 변환하기 위해서도 링커는 필요합니다.
  • 컴파일러는 소스 코드 파일에 있는 정보를 추가하여 이것을 컴퓨터가 이해할 수 있는 명령으로 번역합니다. 그 결과는 새로운 파일, 즉 목적 파일입니다.
  • 목적 파일은 OBJ로 끝납니다. 목적 파일 이름의 앞부분은 해당 소스 코드 파일의 이름과 동일합니다.
  • 그런데 이들 파일들은 모두 동일한 디렉토리에 저장됩니다.
  • 에러가 생길 수도 있습니다. 컴파일러는 이해 불가능한 무언가를 보게 되면 컴파일을 중단하고 에러 메시지를 화면에 내보냅니다. 겁나게 들릴지도 모르지만 사실 에러를 고치는 것은 아주 쉽습니다.
  • 어떤 C++ 전문가들은 목적 파일의 내용들을 목적 코드라고 부릅니다. 그들은 이빨 틈새로 침을 내뱉듯이 이렇게 말하곤 하죠, "목적 파일에는 목적 코드가 들어있는 거라고, 이 멍청한 양반아."
링커(linker)

링커란 컴파일러처럼 하나의 프로그램이며 그 임무는 최종 프로그램 파일을 만드는 것입니다.

링커가 하는 일은 컴파일러가 만든 OBJ파일을 잔뜩 치장시켜 최종 프로그램 파일을 만드는 것입니다. 최종 프로그램 파일의 확장자는 COM이나 EXE입니다.

프로그램 파일 이름의 앞부분은 소스 코드 파일 이름의 앞부분과 동일합니다. 즉, 만일 여러분이 UFOKILL.CPP로 시작했다면 컴파일러는 UFOKILL.OBJ라는 목적 파일을 만들고, 링커는 UFOKILL.EXE라는 최종 프로그램 파일을 만듭니다.
  • 대부분의 CPP컴파일러는 컴파일러와 링커의 역할을 함께 수행합니다. 이따금씩 "컴파일"과 "링크"가 두 단계로 구분된 것을 보게 될지도 모르지만(사실이 그러니까요) 여러분의 컴파일러에서는 아마도 그 일들이 하나로 결합되어 수행될 겁니다.
  • 컴파일러처럼 링커도 무언가 이해할 수 없는 것을 보면 에러 메시지를 내보냅니다. 이런 경우 여러분은 에러 메시지를 판독하여 프로그램을 다시 컴파일 해야 합니다. 에러를 처리하는 것은 나중에 배웁니다.
  • 문서편집기 → 컴파일러 → 링커
  • 소스코드 → 목적 코드 → 프로그램
  • 프로그램 파일은 EXE로 끝납니다. 링커에게 COM파일로 만들라고 지시할 수도 있습니다.
  • 하나의 소스 코드 파일로 시작해서 결국 디스크에는 세 개의 파일이 만들어지는 것이죠. UFOKILL.CPP, UFOKILL.OBJ, UFOKILL.EXE. 어떤 컴파일러는 여러분의 하드 드라이브를 아예 더 많은 파일로 도배할지도 모릅니다.
전통적인 첫 C++프로그램 작성하기

고대 로마 시대 이후 모든 C++ 책에는 사용자들이 맨 먼저 만들게 되는 전통적인 프로그램이 있습니다. 그 관습이란 바로 이것입니다.

이름: GOODBYE.CPP 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#include  
void main() 
{ 
cout << "Goodbye, cruel world!₩n"; 
} 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이런! 뒤로 물러나서 눈을 깜빡거려 보세요. 하지만 앞으로도 프로그램들은 이런 식으로 제시될 겁니다. 그러니 여러분은 이것에 익숙해져야겠죠.
  • << 는 재지정 기호입니다. 대부분의 키보드에서는 shift키와 콤마(,)키를 두 번 누르면 됩니다. 문장이 세미콜론(;)으로 끝난다는 사실에 주의하세요.
이것을 보면 즉시 무슨 뜻인지 이해할 수 있어야 합니다. 뭔가 낯익은 것 같지 않나요? 네, A에서 Z사이의 영어 알파벳인데 대부분 소문자로 되어 있습니다.. 그리고 괄호나 { 또는 }와 같은 것들은 여러분의 키보드에서 본 적이 있는 것들이죠. cout와 ₩n을 제외한 나머지 단어들은 여러분에게 익숙한 것들입니다.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
include 
void 
main 
"Goodbye, cruel World!" 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
어때요? 아직도 감이 잘 오지 않나요? 이제 여러분이 할 일은 이런 어처구니없는 텍스트를 다음과 같은 메시지를 화면에 내보내는 프로그램으로 변형시키는 것입니다.

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Borland C의 통합 환경에서 GoodBye프로그램 만들기 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이 단계들은 Turbo C와 Borland C++ v 3.1까지에 적용되는 것들입니다.

1단계. Borland C 통합환경에 들어와 있는 상태가 아니라면 도스 프롬프트에서 BC를 입력하여 작동시킵니다. 그리고 다음과 같이 입력합니다.

C:₩>BC
그리고는 Enter를 누릅니다. 그러면 Integrated Development Environment(IDE)가 나타나면서 NONAME00.CPP라는 이름의 빈 편집화면이 입력의 열망에 불타는 여러분의 손가락(!)을 기다립니다. 이미 여러분은 Borland C++를 사용하고 있었다면 이전에 작업하던 프로그램이 편집 윈도우에 나타날 것입니다. 그런 경우에는 File메뉴에서 New를 선택합니다. 그러면 새로 작업할 수 있는 빈 윈도우가 나타납니다. 분명히 NONAME00.CPP윈도우가 나타나야 할 상황인데도 나타나지 않을 때(버그겠죠?)에도 File 메뉴에서 New를 선택하면 됩니다.

2단계. goodbye.cpp 소스 코드를 입력합니다.

3단계. File메뉴에 있는 Save명령을 사용하여 프로그램을 저장합니다. 파일 이름은 goodbye.c로 합니다. Borland C컴파일러는 파일에 CPP확장자를 붙여 저장합니다. 이것은 C++고유의 확장자로서 C확장자와 마찬가지입니다.

4단계. Run메뉴에서 Run이라는 타이틀이 붙은 메뉴 항목을 선택합니다.

또 다른 윈도우가 나타나면서 여러분이 미처 알아볼 수 없을 만큼 빠르게 메시지를 내보냅니다. 아마 고작해야 윈도우 상단의 Compiling 그리고 Linking같은 단어들이나 알아볼 수 있을 겁니다. 통합 환경에서는 Run메뉴 항목이 선택되면 컴파일과 링크 단계들이 차례로 수행됩니다. 화면의 하단 윈도우는 "메시지"윈도우로서 방금 무슨 일이 일어났는지를 여러분에게 알려줍니다. 여러분은 아마 그 윈도우에서 다음과 같은 내용들을 보게 될 것입니다.

Compiling goodbye.cpp 
Linking goodbye.exe 
그러면 모든 것이 성공적으로 수행된 것입니다. 즉, C++ 컴파일러가 여러분의 소스 코드 텍스트 파일을 가지고 goodbye.exe라는 위대한 프로그램 파일을 만들어낸 것이죠. 그러면 음... 축하가 다음 순서네요! 집에 초콜릿과 다이어트 콜라는 있겠죠?
  • 만약 에러가 발생하면 Borland C++는 컴파일을 중단하고는 무엄하게도 "Error"표시를 번뜩일 겁니다. 그러면 여러분은 편집 윈도우로 되돌아가서 에러가 있는 줄을 반전시켜야 합니다. 그리고는 그 줄에 입력된 내용들 중 빠진 것은 없는지, 이 과의 앞부분에 제시된 소스 코드 목록과 대조 확인한 다음 다시 시도해야 합니다. 에러가 발생했을 때 그 고통을 처리하는 방법은 다음에 자세히 다루어질 것입니다.
저장하라! 컴파일하라! 링크하라! 실행시켜라!

C++로 프로그램을 만들려면 4단계가 필요합니다. 저장, 컴파일, 링크 그리고 실행이 바로 그것이죠. 대부분의 C++프로그래밍 언어 패키지들은 링크 단계를 자동으로 수행합니다. 하지만 자동으로 수행되든, 수동으로 수행시키든 이 단계를 거쳐야 하는 것은 마찬가지입니다.

저장은 소스 코드를 저장하는 것을 의미합니다. 소스 코드는 문서 편집기로 작성된 뒤 CPP라는 확장자를 가진 텍스트 파일로 저장합니다.

컴파일이란 텍스트 파일에 들어 있는 명령들을 컴퓨터의 마이크로 프로세서가 이해할 수 있는 명령들로 변환하는 과정을 말합니다.

링크 단계에서는 그 명령들이 최종적으로 프로그램 파일로 변환됩니다.(다시 말하지만, 여러분의 컴파일러는 이를 자동적으로 수행할는지도 모릅니다.) 마지막으로, 작성한 프로그램을 실행시킵니다.
  • Borland C++의 통합 환경(BC)에서 컴파일, 링크 그리고 실행에 대한 명령은 RUN입니다. 이는 편리하게도 Run메뉴에 있는데, 대신 Ctrl + F9를 누르는 버릇을 기르는 것도 괜찮을 겁니다.
Borland C++통합 환경에서 프로그램의 결과를 보려면 alt + F5를 누릅니다. 이 키 누름은 출력 화면을 내보냅니다. 통합 환경으로 되돌아오려면 Enter를 누릅니다.

편집과 재컴파일에 요구되는 고뇌들

처음부터 제대로 된 C++프로그램을 만들 수는 없습니다. 자칫 잘못하면 cout가 아니라 cour나 coutt처럼 소스 코드에 입력 실수가 들어가기도 합니다. 그런 경우 컴파일러는 에러를 뱉어내고 프로그램은 만들어지지 않습니다. 아니면 프로그램이 world대신에 word1을 화면에 내보낼 수도 있겠지요. 사실 이런 종류의 실수는 에러가 아닙니다. 그보다는 그저 "바보짓"이지요. 하지만 그렇다고는 해도 분명히 고쳐져야 할 무엇임에는 틀림없습니다.

망가진 프로그램을 고치려면 대개 다음과 같은 두 단계를 밟아야 합니다.
  1. 소스 코드를 재편집하고 수선된 파일을 디스크에 저장합니다.
  2. 소스 코드를 재컴파일하여 수선된 최종 프로그램 파일을 만듭니다.
이들 역시 앞에서 설명된 C++ 언어 개발 주기에 포함된 단계들입니다. 프로그래머로서 여러분은 가능한 한 이런 단계들을 피하려고 노력하겠지만 실제로는 아주 빈번하게 일어납니다.

소스 코드 파일 재편집하기

소스 코드 파일은 돌이나 실리콘 같은 것에 조각된 것이 아닙니다. 즉 소스 코드 파일은 변경될 수 있습니다. 때로는, 특히 에러나 실수가 있는 경우에는 변경이 불가피하기도 합니다. 또 어떤 경우에는 그저 프로그램을 수정하고 싶은 경우가 생기기도 합니다. 예를 들면 어떤 기능을 추가하고 싶거나 메시지나 프롬프트를 바꾸고 싶을 때가 있겠죠. 완고한 몇몇 C++의 대가들은 이를 조정한다고 칭합니다. 그렇게 하려면 소스 코드 파일을 다시 편집해야 합니다.

앞 과에서 소개한 Goodbye프로그램은 goodbye, cruel world! 라는 메시지를 화면에 내보냈습니다. 하지만 여러분은 원하는 메시지를 거의 모두 화면에 내보내도록 프로그램을 만들 수 있습니다. 다른 메시지를 내보내도록 편집기로 소스 코드 파일을 편집하면 되는 것이죠. 지금 한 번 해볼까요? 자, 문서편집기를 사용하여 goodbye.cpp를 다시 편집해봅시다. 통합 환경을 사용하고 있다면 goodbye.cpp 소스 코드를 담고 있는 윈도우를 활성화합니다.(마우스가 있으면 그 마우스로 해당 윈도우를 클릭하세요.) 도스를 사용하고 있다면 문서편집기를 파일을 재편집합니다. 즉 편집기를 실행하여 goodbye.cpp소스 코드 파일을 불러옵니다.

화면에 goodbye.cpp 소스 코드를 불러왔으면 이제 메시지를 변경할 수 있습니다. 다음 내용이 있는 줄만 편집해야 합니다.

cout << "Goodbye, cruel world!₩n"; 
goodbye, cruel world! 텍스트(이것 만이에요!)를 다른 메시지로 대체합니다. 다른 부분, 즉 ₩n이나 겹따옴표밖에 있는 내용들은 절대로 건드리지 마십시오. 예를 들면 , goodbye, cruel world를 지우고 그것은 Farewell, you ugly toad!로 대체할 수도 있을 것입니다. 겁내지 말고 한 번 해보세요. 명령입니다! 그러면 goodbye.c소스 코드 파일의 텍스트가 다음과 같이 바뀝니다:

cout << Farewell, you ugly toad!₩n"; 
이렇게 고친 프로그램의 결과 역시 Farewell, you ugly toad!를 화면에 내보내는 것으로 바뀝니다. 휴우, 이 세상의 모든 PC가 이 메시지로 하루를 시작하면 좋을 텐데... 아주 매력적인 문구 아닌가요?

편집이 끝나면 작업한 것을 다시 한 번 확인합니다. 그리고는 편집기의 저장 명령으로 그 파일을 다시 디스크에 저장합니다. 이제 소스 코드 파일을 재컴파일할 준비가 된 겁니다. 재컴파일에 관해서는 다음절에서 설명합니다.
  • "소스 코드 파일의 재편집"이란 문서편집기로 소스 코드, 즉 C++ 언어 명령들을 담고 있는 텍스트 파일을 수정한다는 뜻입니다.
  • 컴파일러나 링커가 포착한 에러를 고치거나 프로그램을 수정하려면 해당 소스 코드 파일을 재편집해야 합니다. 이런 일은 아주 자주 일어납니다.
  • 다 고쳤으면 파일을 다시 디스크에 저장합니다.
  • 파일을 다시 저장하면 원래의 파일 위에 겹쳐 쓰여집니다.(즉 goodbye.cpp를 고친 뒤 다시 저장하면, 원래의 파일은 이 새로운 내용의 파일로 대체됩니다.) 그러니 만약 이 파일을 새로운 이름으로 저장하고 싶으면 여러분 편집기의 Save as명령을 사용하십시오.
재컴파일하기

재컴파일이란 프로그램을 다시 한 번 만드는 것을 의미합니다. 즉 원래 그 프로그램을 만들기 위해 밟았던 단계들을 다시 밟는 것이죠. 대개 이 과정은 앞절에서 했던 것처럼 소스 코드를 수정하거나 변경한 후에 수행됩니다. 소스 코드가 달라졌으니까 컴파일러가 이를 가지고 새롭고도 훨씬 나은(그리고 바라건대 버그가 없는) 프로그램을 다시 만들도록 해야 하는 것입니다.

재컴파일하기 위해서는 앞 과에서 설명된 단계들을 사용해야 합니다. 예를 들자면 Borland C++ 통합 환경에서는 프로그램을 컴파일하고 링크하고 그리고 실행시키기 위해서 Alt + F9를 눌러야 합니다.
  • 재컴파일을 한 후에도 에러가 있으면, 다시 소스 코드를 재 재편집한 다음 재 재컴파일을 해야 합니다.(사실 그것들도 재편집, 재컴파일이죠. 말은 우습지만)
에러의 고통 처리하기

에러는 있을 수 있는 일입니다. 아무리 최고의 프로그래머라 하더라도 다들 에러에 부딪치곤 합니다. 로터스 1-2-3, 한글 그리고 그 밖의 유명한 소프트웨어 패키지를 만든 사람들도? 그들 역시 매일 에러 때문에 골치를 앓습니다. 빌 게이츠? 물론이죠. 에러는 도처에 있는 것이니까요. 피터 노턴? 얼마나 많은 에러를 만드는지 알면 웃음이 나올걸요. 에러가 나온다 해도 전혀 당황할 필요가 없습니다. 다행스럽게도 우리들의 컴파일러는 그것이 어떤 에러인지 그리고 어디에서 발생했는지 등등을 아주 무시무시할 정도로 정확하게 알려주거든요. 그 악몽 같던 수학 시간과 비교해보세요. 여러분이 얼마나 천진난만한 실수를 저지른 것인지는 고려하지 않고 그저 여러분의 계산 결과에 대해 무조건 "틀렸음."이라고 표시만 해주지 않던가요? 네, 그에 비하면 컴퓨터는 정말로 사려가 깊죠. 아주 친절하게 잘 가르쳐 주니까요.

헉! 에러! 하지만 자살하기 전에....

여기 새로운 프로그램 ERROR.CPP가 있습니다. 이 이름에 들어있는 유머 감각을 이해할 수 있을지 모르겠내요. 이것은 결점 있는 C++ 프로그램으로서, 여기에는 고의적인 에러가 들어가 있습니다.

이름: ERROR.CPP 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#include  
void main() 
{ 
cout << "This program will error.₩n" 
} 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이제 여러분이 할 일은 error.cpp의 소스 코드를 편집기에 입력하는 것입니다. Borland C++의 통합 환경을 사용하고 있다면 File메뉴에서 New명령을 선택하십시오. 그러면 새로운 윈도우로 편집을 시작할 수 있습니다.

불행히도 이 프로그램을 컴파일하면 에러가 나옵니다. 이것은 다음에서 자세히 설명합니다. 이런 망쳤잖아! error.cpp프로그램에 에러가 발생했다! 이 어찌 놀라지 않을소냐... 에이, 괜히 그러지 마세요. 예상했던 거잖아요. (그리고 이런 에러는 전에 본 적이 있을 걸요?) 여러분이 어떤 컴파일러를 사용하고 있느냐에 따라 다르겠지만 아마 다음과 비슷한 화면 출력을 보게 될 겁니다.

Error error.cpp 6: statement missing; 
Error error.cpp 6: compound statement missing } 
이와 비슷한 텍스트가 나타나며 여러분에게 에러를 경고하는 것입니다.

에러 메시지 음미하기

이제까지 봐서 알겠지만 에러 메시지들은 다소 무례합니다. 여러분의 어깨에 손을 얹고 안심시키면서 "너 바보짓 했구나"라며 부드러운 목소리로 얘기해주지는 않지요. 에러 메시지들이 인간미가 부족한 것은 사실이지만, 대신 충분한 정보도 그 모자람을 보충합니다. 암호처럼 보이기는 하지만 에러메시지는 여러 가지 정보를 말해줍니다. 사용중인 컴파일러가 어떤 것이든 간에 여러분은 에러 메시지에서 다음과 같은 정보들을 끄집어낼 수 있어야 합니다.

에러가 들어 있는 프로그램, error.cpp 

에러가 들어 있는 줄, 6번 줄 
(아닐지도 모릅니다 - 컴퓨터를 너무 믿지는 마세요) 

에러의 유형, 구문 에러 

에러의 위치( }앞) 
무엇이 잘못된 것인지는 아직 명확하지 않지만, 어쨌든 단서는 만이 주어졌습니다. 무엇보다도 에러가 들어 있는 줄의 번호를 아는 게 중요합니다:

This error is in line 6. 
네, 그래요. 사실 에러는 5번 줄에 있지만 C++프로그래밍 언어가 워낙 교묘해서 컴파일러는 6번 줄에 가서야 비로소 "무언가 빠졌구나!"하고 깨닫게 됩니다.(군기가 빠졌나봐요. 컴파일러를 좀 조일 필요가 있네요, 그쵸?)

에러의 유형을 아는 것 역시 중요합니다. 구문 에러란 입력에 문제가 있는 것을 의미합니다. 구문은 언어의 구성 양식을 일컫습니다. 마치 영어에서 각 문장 끝에 마침표를 쓰듯, C++ 언어에서는 문장 끝에 세미콜론을 씁니다. error.cpp는 세미콜론이 빠져 있습니다. 여러분의 컴파일러는 어쩌면 다음과 같이 직접적으로 그 사실을 일러줄지도 모릅니다.

Statement missing ; 
해결법이요? 소스 코드 파일을 재편집하여 잘못된 것을 고쳐야 합니다. 이 경우에는 error.cpp를 재편집하여 5번 줄의 끝에 세미콜론을 추가시켜야 합니다. 만약 에러 메시지의 주장대로 6번 줄을 들여다본다면 그곳에서는 잘못된 점을 아무것도 찾을 수 없을 겁니다. 괜히 여러분의 눈동자들만 이리저리 방황하다가 결국은 - 누락된 세미콜론 증후군임을 깨닫고 - 그 앞줄에서 문제점을 찾아내서 고치게 되겠지요.
  • 줄 번호는 정확할 수도 아닐 수도 있습니다. 세미콜론이 누락된 경우에는 그 다음 줄이 에러줄로 나타나는 수도 있습니다. 다른 종류의 에러인 경우도 마찬가지입니다. 네, 하지만 그래도 거의 비슷하기는 하니까 도움이 되지요.
  • 구문 에러의 예로는 콜론을 빼먹는 것 외에도 괄호나 겹따옴표(" 또는 "), 중괄호 등을 빼놓는 것, 쉼표를 잊거나 또는 엉뚱한 곳에 쉼표를 찍는 것 그리고 주류와 담배의 세금을 올리는 것 등이 있습니다.
  • 물론 여러분은 이렇게 생각할지도 모릅니다. "좋아, 이 건방진 컴퓨터야 넌 뭐가 잘못되었는지 안다 그거지 - 그럼 고쳐보라구! 하지만 컴퓨터는 곧장 그런 결론으로 나아가진 못합니다. 컴퓨터는 사람의 마음을 읽을 수 없기 때문에 반드시 여러분이 하나하나 세밀하게 지시해주어야 합니다. 하지만 컴퓨터는 뭐가 틀렸는지 지적해내는 데는 정말로 선수들이죠.(하여간 컴퓨터도 속물이라니까요)
문제 있는 프로그램 수선하기

이 세상을 다시 제대로 바로 잡으려면 잘못된 프로그램을 수선해야 합니다. 그러기 위해서는 소스 코드 파일을 편집하고, 필요한 수정을 하고, 다시 그 소스 코드 파일을 디스크에 저장한 다음 재컴파일할 필요가 있습니다.

error.cpp프로그램은 세미콜론을 추가시키면 고칠 수 있습니다. 5번 줄을 편집하여 줄 끝에 세미콜론을 추가합니다. 다음처럼 되겠죠:

cout << "This program will no longer error.₩n"; 
이 줄은 여전히 들여쓰기된 상태여야 합니다. 눈치챘는지 모르겠지만 줄 끝에 세미콜론을 추가한 것 말고 텍스트도 바꾸어 주었습니다. 이 두 가지가 바뀐 것 외에 다른 것들은 모두 손대지 않은 채 그대로입니다.

error.cpp를 다시 디스크에 저장합니다. 
여러분이 사용하는 컴파일러에 맞는 단계들을 거쳐 그 프로그램을 다시 컴파일 합니다. 모든 것이 아무 차질 없이 진행되어야 합니다.(만약 문제가 생기는 경우에는 앞의 두 절을 참고하면서 숨어 있을지도 모르는 에러를 찾아내서 고칩니다) 이제 최종 프로그램을 실행시키고 그 결과가 화면에 출력되는 것을 즐길 수 있겠군요!

This program will no longer error. 
- 파일을 고친 다음 컴파일 하십시오!

통합 환경에서 프로그램의 결과가 환경에 출력되는 것을 보려면 alt + F5를 누르세요. 통합 환경으로 돌아오려면 Enter를 누릅니다.

Errors에서 R을 두 개 빼면 그리스 신화에 나오는 사랑의 신 Eros가 됩니다. 로마 신화에서 사랑의 신은 Cupid입니다. Cupid의 C를 St로 바꾸어 보십시오. Stupid(멍청한)가 됩니다. Stupid errors(멍청한 에러) - 얼마나 사랑스러워요!

이걸로 머릿속을 채울 필요는 없어요

에러에는 두 가지 종류가 있습니다. 경고와 에러가 그것입니다. 어떤 컴파일러들은 에러를 "결정적인"에러라고 부릅니다. 또 어떤 컴파일러들은 "치명적인"에러라고 부르기도 하지요 마치 영화 "13일의 금요일"에서 제이슨이 숨어 있는 옷장 문을 여는 것과 같으니까요.

경고란 "으음, 이건 정말 마음에 안 드네요. 하지만 어쨌든 해드리죠"라는 의미입니다. 이런 경우에는 아마 프로그램이 실행되기는 하지만 여러분이 의도한 대로는 아닐 겁니다. 혹은 단지 컴파일러가 과민하여 경고가 나타나는 수도 있습니다. 대부분의 C++ 컴파일러에서는 다소 소심한 경고 에러 메시지는 여러분이 꺼버릴 수도 있습니다.

에러나 결정적인 에러, 이런 것들은 "주인님, 주인님은 지금 뭔가 불법적인 일을 시도하고 있기 때문에 도저히 저로서는 도의상 이 프로그램을 완수할 수가 없네요"라는 뜻입니다. 네, 물론 그렇게 심한 뜻은 아닐지도 모릅니다. 하지만 어쨌든 컴파일러는 여러분의 명령을 이해하지 못하기 때문에 자신의 임무를 이행할 수가 없습니다.

C++언어의 모습을 살펴보자.

각 프로그램에는 시작점이 있어야 합니다. 여러분이 프로그램을 실행시키면 도스는 그 시작점을 제 갈 길로 떠나 보냅니다. 마치 배를 물위에 띄우듯이 말이에요. 그리고는 마이크로프로세서에 그 사실을 알려줍니다. 그러면 마이크로프로세서는 그 특정한 시작점에서 프로그램의 조타 장치를 넘겨받습니다.

모든 C++ 프로그램에서 시작점은 main()함수입니다. goodbye.cpp와 그밖에 여러분이 지금껏 만든 C++ 프로그램들을 비롯한 모든 C++ 프로그램에는 모두 이것이 들어 있습니다. main()함수는 프로그램이 작동하도록 하는, 즉 화면에 메시지를 내보내게 하는 엔진입니다.

다른 C++ 프로그램들은 main()함수로 다른 작업들을 수행할런지도 모릅니다. 하지만 그게 무엇이든 간에 그 프로그램이 실행될 때 컴퓨터에 주어지는 최초의 명령임에는 틀림없습니다.

각 부분들

그림에서 보는 C++ 프로그램의 각 부분들에 대해 설명하면 다음과 같습니다.
  1. #include는 전처리기 지시문으로 알려져 있는 것으로 멋있게 들릴지는 모르지만 사실 정확한 용어가 아닐 수도 있습니다. 어쨌든 외울 필요는 없어요. 이것은 여러분의 소스 코드에 다른 프로그램이나 파일도 함께 "포함"시키라고 컴파일러에 지시합니다. 일반적으로 이것은 그렇게 하지 않으면 발생할 수도 있는 갖가지 자질구레한 에러들을 피하게 해줍니다.
  2. 는 삼각 괄호 안에 파일 이름이 들어 있는 것입니다.(그러고 보니 C++ 언어는 여러분이 온갖 종류의 괄호들을 다 사용해보도록 하는군요!). 전체문장 #include 는 파일 IOSTREAM.H 사용하라고 컴파일러에 지시합니다. IOSTERAM.H는 대부분의 C++ 프로그램에 필요한 표준 I/O(입출력) 명령들을 포함하는 파일입니다.
  3. void main은 main함수의 이름을 확인합니다. void는 그 함수의 유형이나 함수가 산출하는 결과를 확인합니다. main의 경우에는 계산 결과가 없기 때문에 그에 대한 C++ 용어가 "void"입니다.
  4. 함수 이름 뒤에는 두 개의 빈 괄호가 붙습니다. 이따금 이들 괄호 안에 뭔가가 들어갈 때도 있는데, 나중에 설명합니다.
  5. 중괄호들이 함수를 에워쌉니다. 그림에서 {와 }사이에 들어 있는 것들이 전부 main()함수 부분입니다.
  6. cout는 C++ 언어 명령어입니다. 컴퓨터에게 무엇을 하라고 지시하는 하나의 프로그래밍 언어입니다.
  7. cout 에 부수적으로 따르는 것입니다. 이 경우에는 괄호 속에 텍스트 또는 텍스트 "문자열"이 들어갑니다. 겹따옴표 사이에 있는 것 모두가 cout 텍스트 문자열 부분입니다.
  8. 텍스트 문자열 중 재미있는 부분은 ₩n, 즉 역슬래쉬 문자와 소문자 n입니다. 이것은 Enter키를 눌러 만들어지는 문자를 의미하며, "새로운 줄"로 그 텍스트 문자열을 끝내는 역할을 합니다.
  9. cout 줄 또는 문장을 세미콜론으로 끝납니다. 세미콜론은 C++ 컴파일러에 한 문장이 끝나고 다른 문장이 시작될 때라는 사실을 알려줍니다. 즉, 문장의 마침표와 같은 역할을 하는 것이죠. 이 프로그램에서는 cout가 유일한 명령이지만 그래도 세미콜론은 여전히 필요합니다.
  10. 마지막으로 << 은 출력하고 싶은 것을 보내는 역할을 합니다. C++ 에서는 화면에 출력되는 텍스트도 객체로 생각합니다.
  • 프로그램에 들어 있는 텍스트는 문자열이라 불립니다. 예를 들면 "la-de-ra"도 하나의 텍스트 문자열입니다. 문자열은 겹따옴표로 둘러싸입니다.
  • C++ 언어는 문장 중에 나타나는 갖가지 키워드들로 이루어집니다. 그리고 한국어에서 각 문장이 마침표로 끝나듯이 C++ 언어의 문장들은 세미콜론으로 끝납니다.(하지만 아직은 이런 것들을 외우는 데 에너지를 낭비하진 마세요)
C++ 언어와 함수

언어란 단어들의 단순한 집합 이상의 것입니다. 언어에는 문법이라는 것이 있으며 개념들이 전달되도록 단어들을 적절히 연계시켜 주지 않으면 안됩니다.

언어에는 문법 말고도 규칙, 예외, 자질구레한 기호들 그리고 온갖 종류의 즐거움이 필요합니다. 프로그래밍 언어들 역시 다양한 부분들과 많은 규칙을 가지고 있다는 점에서 구어와 비슷하다고 할 수 있습니다.
  • cout같은 함수들은 한 쌍의 괄호와 그 괄호 안의 많은 내용을 필요로 합니다.(잘 모르더라도 지금은 이런 것들로 초조해 하지 마세요. 그저 "맞아, cout는 그래"라고 고개를 끄덕이며 미소를 지으세요.)
  • 여담이지만, 프로그램의 시작 부분에 #include 가 필요한 이유는 cout가 키워드가 아닌 C++ 함수라는 데 있습니다. iosteam.h 파일은 cout가 정확히 무엇이고, 또 무슨 일을 하는지 컴파일러에게 알려주는 명령들을 담고 있습니다. 만약 #include 줄을 빼면 컴파일러는 "난 이 cout가 뭔지 몰라요"같은 에러를 내보냅니다.
  • 단어에는 그 사용법에 관한 규칙과 옵션이 있습니다. 이 규칙들은 여러분의 컴파일러에 딸려온 C++ 안내서에 모두 나와 있습니다. 그러니 여러분은 이들을 외울 필요가 없습니다. 또 C++를 배우고 사용하다 보면 저절로 익숙해집니다.
  • 괄호는 C++ 단어들에 요구되는 중요한 아이템들 중 일부를 분류하는 데 사용됩니다.
단어들이 모여서 영어와 비슷한 문장을 만듭니다. 문장은 모두 세미콜론으로 끝납니다.
  • 중괄호는 프로그램을 부분 부분으로 분류하는 데 사용됩니다. 몇몇 단어들은 자신의 부속물들을 분류하기 위해 중괄호를 사용하며, 여러분이 프로그램 안에서 만드는 함수를 하나하나는 모두 중괄호에 의해 분류됩니다. 예를 들면 그림과 지금까지 만든 모든 C++ 프로그램에서 중괄호는 main함수의 부속물들을 담는 데 사용되었습니다.
  • 이런 것들이 모두 모여서 - 이밖에 다른 것들도 있지만 여기서는 언급하지 않겠습니다 - C++언어의 구문을 만듭니다. 구문이란 연어의 구성 양식을 말합니다.
입력과 출력

입력과 출력: 뭔가를 입력하면 그에 대한 응답을 얻고, 질문을 하면 대답을 얻고, 300원을 넣으면 콜라 한 캔을 얻는 바로 이런 것들과 맥을 같이 하는 것이죠. 이 입출력은 2과에서 제시되었던 것들과 관련이 깊습니다. 프로그래머로서 여러분이 할 일은 어떤 일을 수행하는 프로그램을 작성하는 것입니다. 아직 여러분은 C++을 공부한지 얼마 되지 않았기 때문에 시시한 프로그램밖에는 만들지 못해도 전혀 이상할 게 없습니다. 하지만 좀 있으면 정말로 굉장한 프로그램을 만들 수 있게 될 겁니다.

컴퓨터씨에게 여러분을 소개하세요.

입력과 출력의 요구에 부응하기 위해 다음에 소개할 whoru.cpp 같은 프로그램을 만들어 볼 수 있습니다. "whoru" - 한 번 발음해 보세요. 도스 파일 이름이면서 동시에 "who are you", 즉 "넌 누구니?"라는 뜻입니다. 재미있죠? 괜히 "horror you"같이 이상하게 발음하지 마세요. 안 어울려요!

이 프로그램의 목적은 여러분이 키보드로 자신의 이름을 입력하면 컴퓨터가 다정하고 친절한 인사말과 함께 그 이름을 화면에 보여주도록 하는 것입니다.

이름: WHORU.CPP 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#include  
void main() 
{ 
char me[20]; 
cout << "What is your name?"; 
cin >> me; 
cout << "Darn glad to meet you, " << me << "₩n"; 
} 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
whoru.cpp 소스 코드 입력은 빈 화면에서 시작합니다. 통합 환경의 경우에는 File메뉴에서 New를 선택합니다. 도스 프롬프트에서는 편집기를 사용하여 이 새로운 프로그램을 입력할 수 있는 빈 화면을 불러옵니다.

작성이 끝나면 그 파일을 디스크에 저장합니다. 이름은 whoru.cpp로 합니다.

WHORU.CPP를 컴파일하고 실행시키기

컴파일러로 whoru.cpp 소스 코드를 컴파일합니다.

구문이나 그 밖의 다른 에러가 있는 경우에는 여러분이 입력한 소스 코드를 이 책에 나와 있는 것과 대조해 보십시오. 모든 것이 제대로 입력되었는지 확인하려면 앞의 내용들을 다시 검토해보십시오. - 즉 괄호나 겹따옴표, 역슬래쉬, 퍼센트 기호, 재채기, 콧물, 그 밖의 모니터 화면 위에 있는 괴상한 것들에 주의하세요.

컴파일러가 일을 성공적으로 수행하면 디스크에 또 다른 파일, 즉 whoru.obj이 생깁니다. 이 목적 파일이 링커에 의해 링크되어 최종 프로그램은 whoru.exe가 만들어집니다.

공로에 대한 보상

컴파일러가 whoru프로그램을 자동으로 실행하지 않으면 지금 여러분이 실행시키세요. run명령을 선택하거나 도스 프롬프트에서 프로그램의 이름 - whoru -을 입력하세요. 결과는 다음과 같아야 합니다.

What is your name? 
이제 이 프로그램은 여러분이 자신의 이름을 입력하기를 기다립니다. 계속 하십시오: 여러분의 이름을 입력하라구요! 그리고 Enter를 누릅니다. 만약 여러분이 buster라고 입력하면 그 다음 줄은 다음과 같이 화면에 나타납니다.

Darn glad to meet you, Buster! 
whoru.cpp 프로그램의 작동 방식에 관한 비밀 정도 - 쉿!

C++ 프로그램이 실행될 때 컴퓨터는 맨 먼저 main함수에 있는 명령들을 수행합니다.(다른 내용이 먼저 수행될지도 모르지만 지금은 중요하지 않습니다) whoru.cpp에는 main함수에 네 개의 명령이 있습니다. 컴퓨터는 그들 각각을 다음과 갈이 처리합니다.

char me[20] 
이 줄은 문자열 변수를 만들라고 컴파일러에 지시합니다. character의 줄임말인 char는 문자들의 저장소를 확인합니다. 그 문자열 변수의 이름은 me입니다.(여러분의 변수에 어떤 이름이나 붙일 수 있습니다) 사각 괄호 안에 있는 숫자는 컴파일러에 me변수가 사용할 20자의 저장소 - 20바이트를 의미합니다-를 챙겨두라고 지시합니다. 여러분은 me의 그 저장소 안에 20자 이내의 문자열을 저장할 수 있습니다.

cout << "What is your name?"; 
이 줄은 컴파일러에 printf함수를 실행하라고 지시합니다. printf는 겹따옴표 안의 텍스트 문자열 What is your name?을 화면에 나타냅니다. 이것은 이 프로그램의 프롬프트로 사용자의 입력을 요청합니다.

cin >> me; 
이 줄은 컴파일러에게 cin함수를 실행하라고 지시합니다. cin은 특정 입력을 위해 키보드를 판독합니다. 그 입력은 cin에 텍스트 문자열을 검색하다가 Enter키가 눌리면 그 작업을 중지하라고 지시합니다. cin함수의 me부분은 me변수에 입력된 텍스트를 저장하라고 컴파일러에 지시합니다.

>>은 자료의 흐름을 뜻합니다. cin이 입력을 받고 작업이 끝나면 입력된 텍스트를 me에 전달합니다. 여기서는 ">>"이 사용되었다는 점에 주의합니다.

cout << "Darn glad to meet you, " << me << "₩n"; 
이 마지막 줄은 컴파일러에 cout함수를 실행하라고 지시합니다. 그러면 겹따옴표 속의 텍스트를 화면에 내보내는 cin은 변수를 감시합니다. 변수는 "여기에서 난 변수에요. 그러니 내가 가진 정보를 찾으라구요!"라는 의미입니다. << 다음에 지정되는 me변수의 내용이 문자열로 사용됩니다.

C++ 에서는 "텍스트", 변수, ₩n등등 이 모든 것을 객체로서 다룹니다. 이것이야말로 객체중심 프로그래밍의 진수라 할 수 있습니다. 그렇지만 어딘지 복잡해 보이내요. 믿어지지 않을지도 모르겠지만 차근히 조금만 더 읽어보면 이 내용들이 모두 이해가 될 겁니다. 정말로 얼마 뒤 여러분은 진짜 혁신적인 C++ 프로그래머가 될거라구요.

여러분이 기억하지 못할 C++의 중요한 규칙들!

C++는 규칙으로 가득 차 있습니다. 하지만 여러분은 지금 배우는 이 규칙들을 아마 틀림없이 까먹을 겁니다. 그래서 컴파일러는 여러분에게 심술궂은 에러 메시지를 자꾸 뱉어낼거구요. 슬프긴 해도 바로 이게 삶의 진실입니다. 마치 무뚝뚝한 택시 운전사나 높은 세금 그리고 공식적인 자리에서 여러분의 몸이 만들어낸 괴상망칙한 소리... 바로 이런 것들처럼 우리가 참고 견뎌내야 하는 어떤 것이라구요. 시작하기 전에 경고 한마디: 이 규칙들을 암기할 필요는 전혀 없어요! 나중에 가면 이들 중 대부분은 몸으로 깨닫게 됩니다. 여러분이 규칙에 위반되는 C++ 프로그램을 작성할 때 말이지요.

유용한 RULES프로그램

여러분이 C++ 규칙들을 쉽게 이해하도록 돕기 위해 그것을 하나의 프로그램으로 요약했습니다. RULES라는 이름의 프로그램인데, 여러분이 직접 작성할 수 있습니다. RULES 프로그램은 C++의 기본적인 규칙들을 상기시키는 몇 줄의 텍스트를 화면에 내보냅니다.

이름: rules.cpp 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#include  
void main() 
{ 
cout << "Braces come in pairs!₩n"; 
cout << "Comments come in pairs!₩n"; 
cout << "All statements end with a semicolon!₩n"; 
cout << "Spaces are optional!₩n"; 
cout << "Must have a main function!₩n"; 
cout << "C++ is done mostly in lowercase.₩ 
It"s a case-sensitive language.₩n"; 
cout << "Don"t let the underlines bother you!₩n"; 
cout << "Declare variables before you use them!₩n"; 
} 
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
rules.cpp 소스 코드를 편집기에 입력합니다. 입력을 끝냈으면 내용을 다시 확인한 다음 rules.cpp라는 이름으로 파일을 저장합니다.
  • 통합환경에서는 결과를 보려면 alt + f5를 눌러야 합니다.
  • 소스 코드에서는 분리되었던 8번 줄과 9번 줄이 결과적으로는 한 줄로 출력됩니다. 왜냐하면 오직 ₩n 문자만이 새로운 텍스트 줄을 만들어내라고 cout에 지시하기 때문입니다. ₩n조합은 새줄(newline)이라는 이름으로 불립니다.
보너스 프로그램 시간입니다!

다음 텍스트 문자열을 한 번 살펴보세요.

"This is a string of text." 
문자열이란 그것의 이름이고, 그것이란 문자열입니다. 문자열은 텍스트로서 두 개의 겹따옴표로 둘러싸이는데, 이게 바로 C++ 언어가 텍스트 줄들을 다루는 방식입니다. 이 장에서는 위의 문자열과 비슷한 텍스트를 화면에 나타내기 위해 cout함수가 여러 번 사용되었습니다. 거의 모든 경우에 다음과 같은 문자로 끝납니다.

₩n 
이것은 "나에게 새로운 텍스트 줄을 줘!"라는 뜻입니다. 실제로 n은 "새로운 줄"의 "새로운"에 해당하는 new를 나타냅니다.
  • C++에서 ₩n문자는 마치 Enter키를 누른 것과 같은 역할을 합니다.
  • ₩n의 n은 항상 소문자입니다. 사실 C++는 대부분이 소문자입니다.
  • ₩n은 새 줄이라 불립니다. 큰소리로 말하지만 않는다면야 뭐, 슬래시 n이나 역슬래시 n이라고 불러도 되구요.
  • /n과 비슷한 성질을 가진 그 밖의 다른 문자들은 다음에 설명합니다.
Q&A

Q. 텍스트 편집기와 워드프로세서의 차이점은 무엇입니까?

A. 텍스트 편집기는 단순히 텍스트만을 만들어냅니다. 포맷 명령어나 특별한 워드프로세서에 필요한 특수기호는 없습니다. 텍스트 파일은 굵은 글씨체라든가 이탤릭체 같은 서체형식, 줄 끝에서 단어가 잘릴 것 같을 때 알아서 자르지 말고 다음 줄로 이동시켜 주는 기능 같은 것이 없습니다.

Q. 나의 컴파일러 안에 내장된 편집기가 있을 때 반드시 그것을 써야 하는지?

A. 대부분 모든 컴파일러는 어떠한 텍스트 편집기로 만든 원시코드도 컴파일합니다. 하지만 내장된 편집기를 쓸 때 편리한 점은 개발과정의 사이클 도중 쉽게 컴파일러와 편집기 사이를 앞두키로 왔다갔다하게 해 준다는 것입니다. 기교적으로 잘 만들어진 컴파일러는 완전히 통합된 개발환경(
TAG :
댓글 입력
자료실

최근 본 상품0