1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.
판매자 | 프리미엄 | 판매 납포인트 | 무료 | 평점 | 0점 / 총 0명 참여 |
---|
***************************< 캠퍼스 C 강좌 >******************************
[제목] :
[코드] : campusc1-016 (초급)
[교재] : CAMPUS C (초급, Third edition) [출판사 : 책과스승]
[알림] :이 파일은 "캠퍼스 C"에서 모든 분께 공개한 "초급 강좌"입니다.
이 [알림]의 내용을 지우지 않는다면 누구에게나 임의로 복사해 줄 수
있습니다.그러나 이 강좌 내용에 대한 저작권은 "캠퍼스 C"에 있습니다.
[연락처] : 605-8662 (서울) ("캠퍼스 C", 도서출판 "책과 스승")
천리안 : go campusc
나우콤 : go lcampc
하이텔 ID : campusc
****************************<< 목 차 >>************************************
<1> menu.exe의 구성
1> 숙제 해답
2> 분할 컴파일 방법.
<2> 소스 분석및 문제
**************************< 내용 시작 >********************************
<1> menu.exe의 구성
***********************************************************************
1> 숙제 해답
-------------
같이 보내는 menu.exe 파일에는, 지난 15회 까지 나간 숙제중 해답
이 필요하다고 생각하는 것만 골라 실었습니다. 제 생각에는 스스로 못할 문
제가 별로 없다고 생각했는데, 의외로 해답을 요구하는 분이 많더군요.
--------------------
2> 분할 컴파일 방법
--------------------
"분할 컴파일" 이라는 말이 정확치는 않은것 같은데, C에서는 컴파
일 할 때 여러 개의 이름으로 된 소스 파일을 "일괄적"으로 컴파일해서 하나
의 실행파일(xxx.exe)를 만드는 방법이 제공되고 있습니다. 이것은 정확하게
는 "make" 라는 유틸리티인데, 터보 C 에서는 "프로젝트(PROJECT)"라는 이름
으로 그 기능을 간단하게 제공하고 있습니다. 먼저 터보 C의 메인 메뉴를 보
면 "PROJECT"라는 항목이 있을 겁니다.
실제로 연구소 등에서 프로그램을 개발할 때는 여러 사람이 팀을 이
루어서 개발을 합니다. 그 때 "프로젝트"란 용어를 씁니다. 터보 C 메뉴의
project 도 똑같은 의미 인데, 이렇게 프로젝트란 용어를 쓰면 그 일의 규모
가 아주 크고 복잡하다는 느낌이 "솔솔" 풍기지요.
먼저 터보 C의 "project" 항목이 하는 일을 개념적으로 살펴보면,
여러개의 "xxx.c" 파일을 전부 컴파일 하기는 하되, 실행파일은 하나가 되게
끔 만들자는 것입니다. 제가 보내 드린 파일을 실제 예로 들어 보면, 다음과
같이 menu.c 와 graphic.c를 동시에 컴파일해서 menu.exe라는 실행 파일을
만들자는 겁니다.
menu.c \
> --> menu.exe
graphic.c /
이렇게 하기 위해서 할일은 지극히 간단합니다. 즉 보내 드린
"menu.prj" 라는 파일을 보세요. 이 파일의 이름에서 "menu"란 것은 내 맘대
로 지은 것이지만, ".prj"란 확장자는 터보 C 에서 쓰라고 결정해 놓은 것입
니다.
이 menu.prj는 아주 간단한 "텍스트 파일" 입니다. 이 파일에는 현
재 다음과 같이 딱 딱 두 줄이 들어가 있지요.
-----------
menu.c
graphic.c
-----------
나는 이 menu.prj 파일을, 터보 C 에디터에서 간단하게 두 줄을 입력하고
"menu.prj" 라고 저장 했습니다. 이와 같이 xxx.prj 파일을 만드는 방법은
간단합니다. 그리고 이 파일의 의미는, 위에 설명한대로 이 파일을 전부 컴
파일 한다는 것이지요.
따라서 앞으로 menu.prj 에 들어가 있는 형태로 컴파일하고 싶으면
먼저 이 파일을 선택해야 합니다. 선택하는 방법은, 터보 C 메뉴에서
---------------------------------------
[PROJECT] [Project name]을 줄줄이 선택
---------------------------------------
하고 이 menu.prj 라는 이름을 입력하면 됩니다.
작업을 한 후 이 menu.prj를 더 이상 사용할 필요가 없을 때는 역시
---------------------------------
[PROJECT] [Clear project] 를 선택
---------------------------------
하면 평상시 처럼, 한개의 파일로 한개의 실행 파일을 만드는 보통상태의 컴
파일을 합니다.
"PROJECT" 란에는 그외에도 다음과 같은 선택항이 있는데, 현재는
다음과 같은 상태로 설정을 하기로 하지요.
----------------------------
Break make on Errors <-- 보기 1
Auto dependencies Off <-- 보기 2
----------------------------
위에서 "보기 1"이 의미하는 것은, "컴파일하다가 Error 메세지를
만나면 컴파일 하는걸 중지 하도록 하자" 라는 의미입니다. 경우에 따라 "경
고(warning) 메세지를 만나면 중지하자" 등 여러가지 선택을 할 수 있습니
다.
"보기 2"의 의미는, "파일을 만든 시간에 의존(depend)해서 작업을
할까(On) ? 말까 (Off) ?"를 나타내는 것입니다.
이건 무슨 얘기 인가 하면, 기본적으로 "make"라는 유틸리티(현재
터보 C 에서는 "PROJECT") 는 시간을 검사해서 컴파일 할 것만 선택을 하는
데, 지금 menu.prj 는 워낙에 간단한 것이니까 상관이 없지만, 실제로는 수
십개의 소스 파일(xxx.c)가 들어가 있습니다. 그런데, 그 중의 파일하나를
수정했다고 칩시다. 그리고 또 컴파일을 할려면, 그 수십개의 소스 파일을
또 전부 컴파일할 필요가 있습니까 ? 변경된 파일만 검사해서 그것만 컴파일
하는게 속도도 빠르고 간편하겠지요. 그런데 "그 변경된 파일"을 알아내는
방법이 바로 "파일의 생성된 시간"입니다.
이건 마치 형사 콜롬보가 "단서"를 잡는것 같은데, 지금 menu.prj의
소스 파일들 경우를 보면 시간이 다음과 같습니다.
MENU C 34704 08-01-94 12:31a <-- 생성 시간
GRAPHIC C 49510 07-31-94 11:59p
MENU EXE 130955 08-01-94 12:34a <-- 아마 최고 느릴꺼다.
위의 경우는 당연히 menu.exe의 생성 시간이 가장 느리겠지요. menu.c와
graphic.c가 먼저 있어야 그걸로 menu.exe를 만드는것 아닙니까 ?
따라서 혹시 menu.c 와 graphic.c의 생성시간이 menu.exe 의 생성시
간 보다 더 느리다면, 그것은 나중에 또 수정을 했다는 의미 아닙니까 ?
이럴 때 위에서 얘기한 항목이
Auto dependencies On
으로 되 있다면, 시간을 따져서 해당되는 파일만 컴파일 하겠다는 뜻이고,
Off로 되 있다면, "시간은 따지지 말고 무조건 모든 파일을 전부 다시 컴파
일하라"는 뜻이지요. 따라서 Off로 해 놓으면 "더 무식한 방법" 이지요. 그
런데 이 방법을 쓰려면 여러분 컴퓨터의 시간이 항상 잘 맞아야 된다는 보장
이 있어야 합니다. 밧데리 나쁜 컴퓨터들은 가끔 시간이 틀릴텐데 그러면 문
제가 생길수도 있겠지요. 지금은 워낙에 간단한 경우라 Off로 해놔도 별 지
장 없을 듯합니다. 앞으로 여러분 스스로 짜는 프로그램이 점점 더 커져서
컴파일 시간이 길어지면 "On" 으로 바꾸는 문제를 염두에 두어야 합니다.
이제 보내 드린 파일들을 컴파일 하는 순서를 정리하면 다음과 같습
니다. (보내 드린 파일(menu.arj)의 압축을 풀면 파일이 많이 있는데 전부
실행 시키는데 필요한 것이니 가급적이면 따로 디랙토리를 만들어서 그 안에
이 파일들을 전부 보관하세요)
터보 C에 들어가서
1. [PROJECT] [Project name]를 선택하고 "menu.arj"를 고른다.
2. [Ctrl + F9]를 동시에 눌러 컴파일 한다.
이와 같이 간단히 하면 됩니다.
***********************************************************************
<2> 소스 분석및 문제
***********************************************************************
menu.exe를 구석구석 실행해 보세요. 제가 여러분들의 소스 분석 능
력 향상을 위해서 여러가지 잡다한 프로그램을 실었는데, 지금까지 배운 것
을 전부 활용하면, 프로그램을 분석할 수 있을 겁니다. 파일에 관한 부분은
앞으로 나올 것이므로 예습삼아 읽어 보세요.
다음의 숙제를 해 보시면서 프로그램을 직접 읽고 이해 하는 것이
이번 강좌의 내용입니다.
프로그램을 분석하는 요령은, 먼저 "실행의 결과"를 보고 내용을 짐
작한 후 분석을 하세요. 훨씬 쉬울 것입니다. 예를 들면, 산토끼를 연주하는
프로그램이 있는데, 그걸 직접 들어 본후 프로그램을 읽어 보면, 아마 거의
짐작이 될겁니다.
[349쪽] 18줄 부터 시작되는 "float Data[8][12] = {" 이하 부분은 [546쪽]
음계의 주파수표를 사용한 것입니다.
[349쪽] 29줄의 char *dong_data 는 char형의 1차원 포인터 이기 때문에
"스트링 하나"를 취급할 수 있는 걸 알 겁니다. 이것은 계명을 "솔솔라라"
따위 대신에 영어로 "GGAA"로 적은 것입니다.
<숙제> [349쪽]의 30줄의 index[] 변수가 의미 하는 것은 무엇인가요 ?
<숙제> [349쪽] 39줄 부터 switch 문이 시작 되는데, 보통의 경우라면
각 case : 문 다음에 "break" 를 쓰는게 일반적인데 여기서는 48줄에만 하나
를 쓰고 있습니다. 이 의도는 무엇인가요 ?
<숙제> [349쪽] 40줄의 continue를 만나면 어디로 가나요 ?
이 40줄 때문에 [349쪽]의 5,6줄 같은 설명을 했습니다. 기능이 무엇입니까 ?
<숙제> [349쪽] 52줄, 53줄의 증가(++)dml 의미는 각각 무엇입니까 ?
<숙제> [349쪽] 62줄 에는 "240." 이라는 부분이 있습니다.
점(.)을 찍은 이유는 무엇 입니까 ?
<숙제> 역시 [349쪽] 62줄에 캐스트(cast) 연산자 "()"를 확인하세요.
<숙제> 현재 무조건 한 박자 씩만 연주 하게 되 있는데, 박자 길이도 임의로
연주 하도록 바꿔 보세요.
<숙제> vocabulary를 사용하려면 "조합형 한글을 미리 올려야 합니다" 이 화
면은 정말 보기 싫게 되 있는데, box및 화면 구성을 칼라를 이용하여 이쁘게
고쳐 보세요.
<숙제> vocabulary의 소스를 읽고 어떤 키를 눌러야 총알이 나가는지 알아
보세요.
<숙제> vocabulary의 소스를 읽고 's' 와 'd' 키를 치면 어떤 일을하는지
알아 보세요.
<숙제> vocabulary는 같이 보내 드리는 a.dic 부터 z.dic의 사전을 이용하여
그 안의 단어를 읽습니다. 이 파일들은 텍스트 파일이므로 본인이 원하는 단
어를 첨가 해 보세요.
<숙제> fighting 의 소스를 읽고 이 프로그램이 하는 일이 무엇인지 알아 보
세요. 그리고 최고 기록이 몇초나 되는지 자신 있는 분은 보내 보세요.
**************************< 끝 마치며 >********************************
오늘 내드린 숙제는 양이 너무 작은지 많은지 잘 모르겠습니다. 열심히 해
보세요. 강좌가 어느덧 반이 넘어갔기 때문에 여러분 자신의 "작품"을 짤 준
비를 해야 합니다.
***********************************************************************