비주얼 C++로 First 예제를 만들어 보았고 이 예제를 통해 프로젝트를 생성하고 컴파일하는 방법, 오류에 대처하는 방법 등에 대해 알아보았다. 문법을 배우기 전에 개발툴에 먼저 익숙해질 필요가 있으므로 프로젝트를 만드는 실습을 좀 더 해 보도록 하자. 이 실습의 목적은 프로젝트를 생성하고 소스를 입력, 컴파일하는 과정을 반복해 봄으로써 개발툴과 소스 편집기에 익숙해지는 것이다. 또한 C로 과연 어떤 프로그램을 만들 수 있는지, C의 코드는 어떻게 생겼는지 대충 구경해 보는 기회가 되기도 한다.

개발툴 자체에 대한 연습 과정이므로 아직 소스의 내용은 몰라도 상관없다. 하지만 입력하면서 소스의 모양은 눈여겨 봐 두도록 하자. 다음장부터 변수니 연산자니 하는 것들을 배우게 되는데 이 소스들을 잘 봐두면 직관적인 이해(또는 추측)을 통해 미리 예습 효과가 생기기도 하고 코드에 대한 궁금증이 유발되어 빨리 공부하고 싶다는 바람직한 욕구가 생길 수도 있다.

다음은 *문자를 반복적으로 출력함으로써 화면에 삼각형을 그린다. 앞에서 실습해 본 절차대로 Triangle이라는 이름으로 빈 콘솔 프로젝트를 만들고 Triangle.cpp를 생성한 후 다음 소스를 입력하면 된다.

: Triangle

#include <stdio.h>

 

void main()

{

     int i,j;

 

     for (i=1;i<=15;i=i+1) {

          for (j=0;j<i;j=j+1) {

              printf("*");

          }

          printf("\n");

     }

}

First 예제보다는 조금 더 소스가 길고 복잡하게 생겼다. 다 입력했으면 컴파일하고 결과를 확인한다. 오타가 없으면 제대로 컴파일될 것이고 다음과 같이 화면에 출력될 것이다.

*

**

***

****

*****

******

*******

********

*********

**********

***********

************

*************

**************

***************

첫줄에 * 하나, 다음 줄에 ** 두 개 이런 식으로 15개까지 *를 출력해서 삼각형 모양을 그렸다. 두 개의 변수를 사용하여 반복적인 루프를 구성함으로써 삼각형이 출력된다. 변수니 루프니 하는 말들은 다음 장에서 배우게 될 것이며 이 예제를 조금 변형하면 거꾸로 된 삼각형을 출력하거나 정삼각형을 만들 수도 있다. 이 예제는 다음에 루프를 공부할 때 분석해 보도록 하자.

Posted by 테티스
,

비주얼 C++은 교육용 컴파일러가 아닌 실무용 컴파일러이기 때문에 실제 개발 업무에 편리한 기능을 많이 제공한다. 그 중의 하나가 프로젝트 기능인데 프로젝트란 무엇인지 알아보도록 하자. First예제의 경우 프로그램의 실체인 코드는 First.cpp 파일에 모두 작성되어 있는데 이 소스를 만들기 전에 프로젝트를 반드시 먼저 만들어야 했다. 소스 파일만 입력해서 바로 컴파일할 수 있다면 편리하겠지만(실제로 터보 C 2.0은 단일 소스로 컴파일 가능하다) 매번 프로젝트를 구성해야 하기 때문에 다소 번거로운 면이 있다.

프로젝트는 하나의 실행 파일을 제작하는데 필요한 관련 파일의 집합이다. 예를 들어 게임을 개발한다고 해 보자. 게임을 만들기 위해서는 코드를 담는 소스 파일 외에도 그림 파일이나 소리 파일, 아이콘, 폰트, 데이터 파일 등 많은 것들이 필요하다. 또한 개발의 효율 향상을 위해 소스도 기능별로 그래픽, 사운드, 점수 관리, 게임 진행 등으로 나누어 여러 개를 포함시킬 수 있다. 이런 것들을 하나의 이름하에 묶어 놓은 것을 프로젝트라고 한다.

사용자 삽입 이미지
실행 파일 하나를 만들기 위해 필요한 모든 구성 파일을 하나의 프로젝트에 포함시켜 두면 이 파일들을 관리하기에 편리하다. 프로젝트는 보통 한 디렉토리에 저장되므로 프로젝트의 위치를 통째로 옮기거나 백업본을 만들기 좋다. 예를 들어 누군가가 이 예제를 달라고 한다면 프로젝트 디렉토리만 압축해서 전달하면 된다. 그래서 비주얼 C++은 아무리 간단한 예제라 하더라도 프로젝트를 먼저 만들도록 되어 있다.

비주얼 C++은 프로젝트보다 더 상위의 개념인 솔루션(Solution)까지 지원한다. 솔루션(비주얼 C++ 6.0에서는 워크 스페이스)이란 여러 개의 프로젝트를 모아 놓은 것이다. 프로젝트는 실행 파일 하나를 만들기 위한 구성 파일의 집합이며 이런 프로젝트 여러 개가 모여 하나의 솔루션을 구성한다. 보통 한 제품은 여러 개의 실행 파일로 구성되므로 솔루션은 제품 하나라고 할 수 있다.

예를 들어 비디오 대여점 관리 패키지를 개발한다고 해 보자. 이 패키지에는 비디오 관리뿐만 아니라 사용자 관리, 대여 관리 등의 각각 다른 실행 파일이 있을 것이고 통계 프로그램, 고객 성향 분석 프로그램 등이 더 있을 수도 있다. 이런 각각의 프로젝트를 하나로 묶어 놓은 것이 바로 솔루션이다. 상용 제품중에 오피스가 솔루션의 좋은 예인데 이 패키지를 설치하면 워드 프로세서인 워드뿐만 아니라 엑셀, 파워 포인트 등등도 같이 설치된다.

비주얼 C++로 프로젝트를 하나 생성하면 같은 이름의 솔루션을 만들고 그 안에 프로젝트를 생성하여 포함시킨다. 기본적으로 솔루션 하나에 프로젝트 하나가 있지만 여러 개의 프로젝트를 솔루션에 새로 만들어 넣을 수도 있다. 결국 앞에서 만들었던 First 예제는 다음과 같이 구성되어 있는 것이다. 이런 구성은 파일 뷰에서 확인할 수 있다.
사용자 삽입 이미지
First 솔루션 안에 First 프로젝트가 있고 이 프로젝트 안에 실제 코드를 가지는 First.cpp가 있다. 솔루션 파일은 확장자 sln(6.0에서는 dsw)을 가지며 프로젝트 파일은 확장자 vcproj(6.0에서는 dsp)를 가진다. 탐색기에서 First 디렉토리를 확인해 보면 이런 파일들이 생성되어 있을 것이다. 물론 First 솔루션 안에 Second 프로젝트를 추가할 수 있고 First 프로젝트안에 Second.cpp, Third.cpp도 마음대로 추가할 수 있다. 이 책의 예제 쉘 프로그램인 HycExam 솔루션을 열어 보면 이런 구성을 확인해 볼 수 있는데 구현하는 기능별로 아주 많은 소스 파일이 포함되어 있다. 단일 소스로는 이런 복잡한 프로그램을 만들기 어렵다.
사용자 삽입 이미지
비주얼 C++로 만든 프로젝트의 실체는 확장자 cpp를 가지는 소스 파일이 아니라 확장자 sln이나 dsw를 가지는 솔루션 파일인 것이다. 만약 First 예제를 저장해 두었다가 다시 열려면 First.cpp를 여는 것이 아니라 First.sln(6.0에서는 First.dsw)를 열어야 한다. 또한 인터넷이나 뉴스 그룹에서 쓸만한 예제를 다운로드 받았을 때도 sln 파일을 열어야 이 솔루션안의 코드 전체를 살펴 볼 수 있고 컴파일도 할 수 있다.

솔루션은 프로젝트보다는 더 상위의 개념이지만 이 책에서는 관습적으로 솔루션이라는 용어 대신 프로젝트라는 용어를 사용할 것이다. 즉 First 솔루션이라고 부르지 않고 First 프로젝트라고 부른다. 프로젝트라는 용어가 더 일반적인데다 다른 컴파일러들은 솔루션의 개념이 없기 때문이다. 솔루션이란 대규모의 패키지를 만들 때나 쓰는 것이지 예제 수준에서는 거의 솔루션을 구성할 경우가 없다.

앞으로 문법 공부를 하자면 수많은 예제들을 만들어 보고 실습해 볼 것이다. 그러자면 새로운 실습을 할 때마다 매번 프로젝트를 만들어야 하는데 사실 이는 무척이나 번거로운 일이다. 고작 10줄 정도되는 소스를 입력해 보기 위해 마법사를 실행하고 옵션 선택하고 구성 파일을 생성해야 하는 것이다. 게다가 매 프로젝트마다 새로운 이름을 붙이는 것도 보통 성가신 일이 아니다.

하지만 몇 번 하다 보면 요령이 생기는데 매번 프로젝트를 만들 필요없이 하나만 만들어 놓고 소스만 계속 바꿔가며 실습을 진행할 수도 있다. 예를 들어 CExam, MyStudy, Dummy 같은 이름으로 프로젝트를 하나 만들어 놓고 소스만 계속 바꾸면 된다. 아니면 아예 이미 만들어 놓은 First 프로젝트를 계속 쓸 수도 있다. 어차피 프로젝트란 소스를 담기 위한 껍데기에 불과하므로 실습중에는 이런 방법을 쓰는 것이 오히려 더 편리하다.

배포 파일인 CExam.zip에는 이런 목적으로 CExam이라는 이름의 더미 프로젝트가 제공되며 이 프로젝트는 비주얼 C++ 6.0, 7.0, Dev-C++에서 모두 사용할 수 있도록 설정되어 있다. 이후 실습에는 이 프로젝트를 열어 놓고 CExam.cpp의 소스만 바꿔 가며 컴파일해 보기 바란다.

Posted by 테티스
,

이 책에서 처음 만들어 본 First 예제는 화면에 korea라는 짧은 문자열만 출력하고 종료하는 아주 간단한 프로그램이다. 아직 C 문법 공부를 시작하지도 않은 상태이므로 이 예제의 코드까지 분석해 볼 필요는 없겠지만 길이가 짧으므로 간단하게 설명해 보도록 하자. 문법에 대해서는 관련 부분에서 체계적으로 다룰 예정이므로 당장 이 예제를 다 이해하지 못해도 상관없다. 가벼운 마음으로 C 프로그램은 어떤 모양을 가지는지 구경이나 해 보도록 하자.

First 예제는 고작 여섯 줄로 되어 있는데 빈 줄과 { } 괄호 부분을 빼고 나면 기껏 세 줄밖에 안되는 셈이다. 첫 번째 줄은 다음과 같이 시작된다.

#include <stdio.h>

이 명령은 stdio.h라는 헤더 파일을 포함하라는 뜻이며 앞으로 어떤 함수를 사용하겠다는 의사 표시이다. 헤더 파일에는 C 컴파일러가 제공하는 표준 함수들에 대한 선언이 작성되어 있는데 stdio.h를 포함함으로써 printf가 무엇을 하는 함수인지를 컴파일러가 알 수 있게 된다.

C 컴파일러는 대부분의 프로그램들이 사용하는 표준 입력, 표준 출력 함수들을 제공하는데 이 함수들을 사용하려면 함수가 선언된 헤더 파일을 포함해야 한다. 그래서 대부분의 C 프로그램은 거의 항상 #include <stdio.h>로 시작한다. 마치 편지 쓸 때 언제나 "안녕하세요"라는 인사말로 시작하는 것과 비슷하다. 더 많은 함수를 쓰고 싶으면 관련된 헤더 파일도 포함시켜야 한다.

이 책의 예제들은 stdio.h 대신 실습용으로 미리 준비해 둔 Turboc.h 헤더 파일을 사용할 것이다. Turboc.h 파일을 포함하면 stdio.h도 같이 포함되며 실습에 필요한 대부분의 표준 함수들을 사용할 수 있다. #include <stdio.h> 다음 줄은 보기 좋게 하기 위해 한 줄을 비워 두었으며 그 다음 줄에는 main 함수가 있다.

void main()

main은 함수의 이름인데 C 프로그램은 항상 main 함수에서부터 실행을 시작한다. main 다음에 붙어 있는 괄호는 main이 함수라는 것을 알려주는 역할을 하며 void는 이 함수의 리턴값이 없다는 뜻이다. Dev-C++의 경우는 int main()으로 되어 있는데 이 컴파일러는 main 함수가 정수값을 리턴하도록 되어 있다. void main()이란 곧 여기가 프로그램의 시작점이라는 뜻이다. main 다음에는 { }괄호가 있는데 이 괄호는 함수의 시작과 끝을 표시한다. { } 안이 곧 함수의 본체이며 여기에 실행하고 싶은 명령을 작성한다.

printf("korea\n");

main 함수 안에는 printf 명령이 작성되어 있는데 printf는 문자열을 화면으로 출력하는 함수이다. 겹 따옴표안에 출력하고 싶은 문자열을 적어 준다. \n은 확장열이라는 것인데 문자열 출력 후 개행하라는 뜻이다. Enter코드를 따옴표안에 바로 표기할 수 없기 때문에 이런 특별한 문자를 사용한다. C의 모든 명령은 반드시 세미콜론으로 끝나도록 되어 있으므로 printf 명령의 끝에도 세미콜론을 붙였다.

이 예제의 전체적인 구조는 다음과 같다. 결국 First 예제는 선언이나 프로그램의 시작점 등의 형식적인 구문 외에는 문자열을 출력하는 printf 함수밖에 없는 셈이며 그래서 이 프로그램은 문자열만 출력하고 종료하는 간단한 프로그램인 것이다. 물론 main 함수 안에 다른 명령을 작성하면 더 복잡한 프로그램이 될 수도 있다.

사용자 삽입 이미지
이번에는 이 예제를 수정해 보자. 아직 문법은 모르지만 대충 구조를 파악했으니 몇 가지는 수정할 수 있을 것이다. "korea"라는 문자열 대신 "Program"을 출력하도록 해 보자. 문자열을 출력하는 부분이 printf이므로 이 함수의 괄호안에 있는 문자열만 printf("Program\n")으로 바꾸면 된다.

printf를 여러 번 호출하면 여러 개의 문자열을 화면으로 출력할 수도 있고 따옴표안에 한글도 사용할 수 있다. 다음에 커서 제어문을 배우면 원하는 위치에 문자열을 출력할 수도 있으며 입력 명령을 사용하면 사용자에게 정보를 입력받을 수도 있을 것이다.

Posted by 테티스
,