1) 지식 창고는 본인이 작성한 콘텐츠(팁/노하우/리소스/강좌 등)을 무료 혹은 가상화폐인 납포인트를 통해 공유하는 공간입니다.
2) 본인이 작성한 콘텐츠에 대해서만 지식 창고에 등록할 수 있으며, 저작권에 위배되는 콘텐츠는 사전경고 없이 삭제될 수 있습니다.
3) 콘텐츠 구매 및 첨부파일 다운로드는 회원그룹 '연구원' 이상 가능하오니, 경험치를 쌓아 진급한 후에 이용 부탁드립니다.
4) 무료 콘텐츠의 본문은 구매절차 없이 즉시 이용할 수 있으며, 판매 납포인트가 있는 콘텐츠는 구매 후 이용할 수 있습니다.
5) 콘텐츠 판매에 따른 납포인트 수익은 지정한 비율(50%)에 따라 판매자에게 지급하며, 납포인트 수익을 통해 진급을 빨리할 수 있습니다.
6) 구매 후 평가를 하면 구매 납포인트의 20%를 돌려 드립니다.
판매자 | 프리미엄 | 판매 납포인트 | 무료 | 평점 | 0점 / 총 0명 참여 |
---|
===========================< 캠퍼스 C 강좌 >==============================
[제목] : C를 위한 컴퓨터의 이해.
[코드] : campusc1-001 (초급)
[교재] : CAMPUS C (초급, Third edition) [출판사 : 책과스승]
[알림] :이 파일은 "캠퍼스 C"에서 모든 분께 공개한 "초급 강좌"입니다.
이 [알림]의 내용을 지우지 않는다면 누구에게나 임의로 복사해 줄 수
있습니다.그러나 이 강좌 내용에 대한 저작권은 "캠퍼스 C"에 있습니다.
[연락처] : 605-8662 (서울) ("캠퍼스 C", 도서출판 "책과 스승")
천리안 : go campusc
나우콤 : go lcampc
하이텔 ID : campusc
============================< 목 차 >=================================
[0] 들어가며
------------
[1] 문법 사항
-------------
<1> 컴퓨터를 뜯어 보자.
<2> 컴퓨터를 켜보자.
<3> 프로그램 의 레벨 (level)..
<4> CPU 가 알아 들어야 한다.
<5> C 컴파일러의 구성에 대하여 (4 부분)
<6> 컴파일을 하면 프로그램은 어떻게 바뀌는가 ?
[2] 함수 소개 및 프로그램 짜기
------------------------------
<1> 컴파일러 환경 설정
<2> 에디터 쓰는법
===========================================================================
[0] 들어가며
===========================================================================
그동안 4만원씩 받고 유료로 운영하던 초급 강좌를 여러분께 공개하기로
결정하였습니다. 강좌는 새로운 "캠퍼스 C" (3차 개정판)에 맞게 내용이 약간씩
변경될 것입니다.
이제 경제적인 부담없이 열심히 이 강좌를 활용하시고 많은 성과를 거두
시기 바랍니다.
참고로 기존의 30회 강좌외에도 새로운 내용을 주제별로 좀 더 자세히
재정리하여 강좌를 보충 할 예정이므로 계속 참조하시기 바랍니다.
그리고 혼자 공부하시다가 궁금한 점이 있으면 언제든지 "묻고 답하기"
한을 이용하시기 바랍니다. 제가 모든 분들의 질문을 대답해 드릴 수는 없지만,
부시삽이나, 혹은 상호간에 "묻고/답하기"가 활발히 진행될 수 있도록 운영하겠
습니다.
===========================================================================
[1] 문법 사항
===========================================================================
<1> 컴퓨터를 뜯어 보자.
---------------------------------------------------------------------------
여러분들은 C를 배우기 위해 이 강좌를 시작 한 걸로 알고 있다. 그러나
실제적으로 C만 배워서는 C 프로그램을 짜기가 쉽지않다. 일부 경험이 있는 분들
은 이미 잘 아시겠지만 빙산의 일부처럼 C 는 단지 물위에 드러난 부분일 뿐이
고, "C 프로그램"을 직접 짜기위해선 물속에 잠긴 나머지 부분을 많이 알아야 한
다.
나는 항상 "C는 일주일 이면 배운다고" 사람에게 얘기하곤한다. 거짓말
이 아니다. 사실 다른 컴퓨터 언어에 익숙한 분들은 C 언어 만을 배우는건 어려
운 일이 아니다. 그러나 많은 사람들이 C를 어렵다고 한다. 물론 표현법이 어려
운 부분이 조금 있기는 하다. 그러나 사실은 물밑에 감춰진 다른 내용을 몰라서
어려운 것이지 C 가 어려운 것이 아니다.
C 공부를 위해서 제일 처음 해야할 일은 컴퓨터를 이해하는 것이다. 사
실은 점점 고급 프로그래머가 될수록 하드웨어 공부를 하지만, 여러분은 저와 같
이 시작하는 김에 잠시 기본적인 하드웨어부터 공부를 해보자. 나중에 "컴퓨터
하드웨어" 부분은 생생한 칼라 사진과 함께 하나의 "컴퓨터 강좌"로 구성될 예정
이고, 그 일부는 "캠퍼스 C"의 (인터넷 상의) 홈페이지에서도 곧 여러분에게 체
계적으로 제공될 것이다.
컴퓨터는 절대로 "추상적" 이거나 "관념적인" 물건이 아니다. 실질적으
로 하드웨어가 존재 하지 않으면 소프트웨어는 얘기를 꺼내지도 못한다. 마치 사
람이 죽어서 시체가 되면 더이상 그 사람의 성격이 어떻고 성질이 어떻고 하는
문제를 따질 필요가 없는것과 같다.
따라서, 일반적으로 컴퓨터 "하드웨어"에 대한 이해가 많을수록 소프트
웨어에 대한 이해도 더욱 "분명"해 지는데, C의 경우는 그 중요성이 더욱 크다.
왜냐하면 C를 만든 사람들이 이 C를 "시스템 프로그래밍용"으로 만들었기 때문이
다. "시스템 프로그램"이란 쉽게 얘기해서 "컴퓨터라는 기계"를 작동 시키는 프
로그램을 말한다. 따라서 당연히 하드웨어를 잘 알아야 C 를 잘 쓸 수 있다.
사실 근본적으로 프로그램을 짜보고 싶으면, 컴퓨터 -> 어셈블러 -> C
의 순서로 공부해야 한다. 그러나 이 방법은 시간이 너무 많이 걸리므로 꺼꾸로
C -> 어셈블러 -> 컴퓨터 의 순서로 내려오는 방법이 일반적인 방법이다.
이제 첫시간 부터 한가지 숙제를 해보기로 하자
<숙제> 여러분 컴퓨터를 직접 뜯어보세요
이건 숙제니까 실제로 해봐야 한다. 우리가 쓰고 있는 PC 같은 작은 컴
퓨터는 하루에 100번씩 뜯어봐도 괜찮다. 단 이 때 다음과 같은 점을 주의하기로
하자.
1. 반드시 모든 전원을 내린다.(플러그 까지 뺀다)
2. 물, 커피 같은 액체를 멀리하고
3. 컴퓨터 내부의 기판 (칩이 많이 꽂혀있는 판) 을 만질때는 가급적
칩" 부분을 만지지 말고, 레코드 판 잡듯이 가장자리를 만진다.
이 때 컴퓨터를 완전히 해부할 필요는 없고 메인 보드(가장 큰 판대기)
를 눈으로 관찰할 수 있을 정도면 된다.이제 거기서 확인 해 볼 것은 다음과 같
은 3가지이다.
1.CPU
CPU는 금박으로 표면 일부가 되 있거나 칩 중에서 가장 크고 근사하게
보이는 것 이다. 모든 칩의 표면에는 이름이 써 있으므로 486, pentium 같은 글
자를 찾아보기로 하자. 최근의 펜티엄 이상의 CPU에서는 열을 식히기 위해 쿨링
팬(조그만 선풍기 같은 것)이 달려있는 것이 많다.
이 CPU는 여러분이 이미 장 아시다시피 제일 비싼 칩이고 컴퓨터에서 가
장 중요한 기능을 하는 "두뇌"와 같은 것이다. 이 CPU의 그림은 교재의 [19쪽]에
실려 있다.
이 칩의 내부에 우리의 최대의 관심사인 "레지스터"가 들어가 있다. 이
레지스터의 기능 및 형태는 [20쪽] [23쪽]을 참조하시기 바란다.
2. RAM
우리는 프로그램을 배워야 할 사람이기 때문에 이 메모리를 잘 알아야
한다. 앞으로 나는 이부분을 아파트에 비유하는데 요즘 메모리들은 실제로 교재
의 [16쪽]의 메모리 그림과 같이 아파트 같이 세워서 꽂게 되있으므로 머리에서
연상을 하기 좋을 것이다.
그리고 우리가 앞으로 배워서 짜게될 프로그램은 평상시에는 하드디스크
안에 있지만 실제로 돌아갈 때는 이 메모리안에 들어온다는 것을 알아두자. 메모
리의 내부 구조는 간단하다. 요즘 아직 입주가 안된 서울 근교의 신도시 아파트
처럼 텅빈 아파트 단지와 같다.
상식으로, RAM 이란 Random Access Memory(메모리 내부안이라면 "아무데
서나 읽어 올 수 있는 메모리")라는 뜻이다. 여러분 컴퓨터에 4 M(메가)의 메모
리가 있다고 치면, CPU는 이 메모리의 어느 위치든지 순식간에 읽어오도록 디자
인 되어있다. 지난번 얘기한 "버스"를 아직 기억 하시는지 모르겠는데 버스에서
임의의 주소를 선택할 수 있도록 되어있다.
RAM도 크게 DRAM (Dynamic RAM) 과 SRAM (Static RAM) 두가지로 나눈
다. 우리가 항상 듣고 접하는 RAM은 거의 다 DRAM일 것이다. 여러분 컴퓨터를 살
때 메인 메모리 4 메가 , 8 메가 하고 얘기하는 것은 다 이것이다. 삼성 같은 기
업에서 256M 메모리를 세계 최초로 개발했다고 선전 하는 것도 마찬가지다. 이것
은 SRAM에 비해 동작 속도가 느리지만 값이 싸다. 그래서 일반적으로 "메인 메모
리"같이 많은 양이 필요한 부분에 주로 쓴다.
이에 비해 SRAM은 "읽고 쓰고 하는 속도"가 빨라 작업을 신속하게 해야
할 필요가 있는 "캐쉬(Cache) 메모리"로 많이 쓴다. 하지만 이것은 "cash 메모리
" 라고 농담을 할 정도로 값이 비싸기 때문에 함부로 못쓴다는 사실만 알고 넘어
가자.
3. ROM
ROM은 (Read Only Memory)의 준말로서 "읽기만 하는 메모리" 라는 뜻이
다. 이 칩은 찾기 조금 어려울지도 모르겠는데, 특징은 칩의 표면에 유리창 같은
동그란 유리가 보인다. 스티카 같은것으로 유리창을 가리는 경우도 많으므로 스
티카를 찾아도 되겠다. 이 스티카에는 "ROM-BIOS" 라고 크게 써 놓은 것도 많다.
이 칩 안에는 그 유명한 ROM BIOS 라는 프로그램이 어셈블러로 작성되어 들어가
있다. 여러분도 나중에 수준에 이르면 이 프로그램을 읽어야 할 필요가 있다. 어
셈블러 강좌를 열어 달라고 요청하는 사람도 많이 있는데, 강좌를 열게되면 그
교재는 이 "ROM BIOS"의 소스 프로그램 하나면 충분하다. 이것은 마치 다음과 같
이 비유될 수 있다.
기독교인 --> "성경"
어셈블러인 --> "ROM BIOS"
"ROM BIOS"는 작은 프로그램이지만 이것을 전부 읽는다는 것은 결코 쉬
운 일이 아니다. 하드웨어 공부를 같이 해야하기 때문이고, 이 프로그램을 전부
읽고나면 컴퓨터 전체에 대해서 이해 할 수 있을 만한 내용이기 때문이다. 아마
6개월은 족히 걸릴 것이다.
이외에도 중요한 칩들이 많으나 나중에 또 뜯어 보기로 하고 일단은 이
3 가지를 확실히 봐두어야 한다. 특히 CPU의 모습과 메모리(RAM)의 모습을 봐두
어야 한다. 이 모습을 도식적으로 그려놓은 것이 교재 [14쪽] "컴퓨터의 구성"
이다.
===========================================================================
<2> 컴퓨터를 켜보자.
===========================================================================
이제 첫 시간이므로 컴퓨터를 켜보자. 이 컴퓨터는 이 강좌를 전부 정복
하는 날 꺼질 것이다. 컴퓨터에게, 특히 CPU에게 생명이 되는것은 역시 전기인
데, 이 것이 들어가면 클럭(clock)을 발생시키는 칩이 CPU에게 심장박동을 시켜
준다. 그 첫 단계에서 부터 CPU는 데이타를 읽어오기 시작하는데, 그 위치는 다
름 아닌 ROM BIOS 가 있는 ROM 부분이다.(주소는 0xffff0 번지이다)
롬(ROM)에 "쓰기(write)를 하려면 특별한 장치가 있어야 하고 전기가 나
가도 데이타가 지워지지 않는 특징이 있다. 이것은 마치 음악듣는 카세트 테이프
처럼 데이타를 기억하고 있다. 이것이 있길래 컴퓨터가 켜진 직후에도 CPU가 읽
어올 데이타가 있는 것이다. 하드디스크에 아무리 많은 프로그램이 들어 있어도
현 단계 에서는 아무 소용이 없다.
이 ROM의 용량은 그다지 크지 않으므로, 그의 임무는 하루빨리 하드 디
스크에 있는 많은 프로그램을 불러 오는것이다. 그러나 그것도 당장 할 수는 없
고 먼저 "특별한 프로그램" 하나를 하드디스크에서 읽어 메모리에 올려 놔야한
다.
그 후에 그 프로그램이 하드디스크에 있는 많은 프로그램을 자유롭게 불
러 올 수 있다. 그 특별한 프로그램이란 다름 아닌 DOS이다.
DOS는 (Disk Operating System)의 준말이다. 즉 "디스크 작동 시스템"
이라는 뜻이다. 컴퓨터에서는 시스템(System)이라는 말이 많이 나오는데, 이건
하드웨어나 소프트웨어에 다 붙여주는 이름이다. 말 그대로 하나의 체계를 이루
어 일을 하는 모든 것에 전부 붙여 준다. 즉 컴퓨터 System하면 컴퓨터와 입력/
출력에 관계된 주변의 여러 장치들을 전부 갖추고 있는 완벽한 구성(set)을 말한
다. 오디오 시스템도 마찬가지로 앰프, 수신기, 스피커 하는 식으로 한 그룹을
얘기한다.
지금 얘기 하는 DOS(Disk Operating System)도 하드나 플로피 디스크 따
위를 구동 시킬 수 있는 종합적인 프로그램 set을 말한다. 사실 DOS가 디스크만
구동 시키는 프로그램은 아니다. 키보드에서 입력도 받고 모니터로 출력도 하는
등 온갖 디바이스(장치)들을 전부 작동시켜준다. 그럼에도 불구하고 왜 DOS라고
했을까 ?
정확한 이유를 읽은 기억은 안나지만, 짐작가는 바가 있기는 하다. 소프
트웨어적인 측면에서 보면 컴퓨터에게 있어서 디스크 만큼 중요한 장치가 없기
때문일 것이다. 컴퓨터가 전기를 먹고 하드웨어적으로 살았으면 그다음엔 정신인
소프트웨어를 넣어 줄 차례이다. 그 소프트웨어가 있는 장치가 디스크이다. 따라
서 이 장치를 가장 중요하게 생각한 듯 싶다.
DOS 까지만 정상적으로 메모리(RAM)에 올라오면 그다음 부터는 하드디스
크의 파일 불러 오는것은 쉬운 일이다.
컴퓨터를 키고 나서 DOS가 메모리에 올라오기 까지의 일련의 과정을 우
리는 부트 프로세싱(Boot processing)이라고 한다. 우리가 흔히 "부팅" 한다고
얘기하는 것이다."부팅"이라는 의미는, 굵은 동아줄을 끌어올리기 위해 가느다란
실 서 부터 점차로 굵은 줄을 살살 끌어 올리는 과정처럼, 본격적인 큰 프로그램
을 살리기 위해 ROM 안에 있는 작은 프로그램이 자기 스스로 주위 환경을 갖춰
나가며 더 큰 일을 할 수 있는 프로그램을 살려 주는 일을 하는 것이다.
나중에 기회가 있으면 눈물겨운 이 과정을 직접 살펴 보기로 하자.
===========================================================================
<3> 프로그램 의 레벨 (level)..
===========================================================================
DOS 까지 살아 있으면 우리는 컴퓨터 에서 "c:\>" 같은 표시를 보게 되
는 것이다. 그리고 한가롭게 커서가 깜박이고 있는데 사실은 이 순간에도 프로그
램은 '사람이 무슨 명령을 키보드로 내려 주지는 않는가'를 기다리며 열심히 돌
고 있는것이다.
우리가 C 로 짠 프로그램은 보통 이 DOS 상태에서 돌아가는 응용 프로그
램에 속한다. 아시겠지만 게임 이라든가 워드 프로세서, 통신 프로그램 등 우리
가 듣는 온갖 프로그램은 이 응용 프로그램(Application Program)에 속한다.
프로그램에는 이같이 일련의 수준이 있다는 걸 알아야 한다. 우리는 보
통 "low level" "high level" 이라는 말을 쓰는데 프로그램이 작동되는 순서대로
"low level" 에서 "high level"로 부른다. [50쪽]의 도식과 같이 다음과 같은 구
조를 가진다.
1. ROM BIOS(부팅) <-- 아주 low level 프로그램.( system 프로그램 )
2. DOS <-- low level 프로그램 ( system 프로그램 )
3. 응용 프로그램 <-- high level 프로그램
여기서 1번과 2번 을 묶어서 "시스템 프로그램" 이라고 부른다. 물론 그
런 프로그램을 짜는 사람이 "시스템 프로그래머" 이다. 그리고 아마 우리의 대부
분은 "응용 프로그래머"가 되기 위해 C 를 배우는 사람들 일것이다.
이 레벨을 언급하는 이유는, 처음에 우리가 C 를 배워서 짜는 것은 응용
프로그램이지만, 점점 더 실력이 쌓이면 시스템 프로그램을 공부할 필요가 생기
고, 또 직접 짤 수도 있기 때문이다.
따라서 여러분이 C 공부를 열심히 하면 곧 시스템 프로그램에 관심을 가
질게 분명하다. 따라서 이 강좌의 교재에는 그런 컴퓨터 기본에 관한 내용을 많
이 실어놨다.
===========================================================================
<4> CPU 가 알아 들어야 한다.
===========================================================================
가장 근본적으로 "프로그램"이란걸 이해하려면 기계어를 알아야 한다.
CPU는 사실상 C도 모르고 어셈블러도 모른다. CPU는 자기가 알아 듣는 말이 딱
한가지있다 그게 바로 기계어(machine language)이다. 기계어는 나중에 자세히
언급하겠지만 온통 숫자 투성이다.
주윤발이 나오는 아주 재미있는 도박 영화 "지존무상"이 있었다. 얼마
나 감동적이었으면 "지존파"까지 등장했는지 모르겠지만, 거기에서 주사위로 시
합을 하는 장면이 나온다.
테이블에 주윤발이 구미호 같이 생긴 여자와 마주 앉았다. 여자가 주사
위 3개를 흔들고 테이블에 올려 놓더니 3개를 나란히 주윤발 앞으로 밀어 준다.
눈금이 전부 1 이다. 합이 3 이다. 주윤발이 놀란다. 여기서 문제를 하나 내자.
<문제> 주윤발이 왜 놀랐나 ?
<문제> 이 게임의 룰(rule) 은 무었인가 ?
사실 이 답을 모르는 사람은 없을 것이다. 그럼 이제 주윤발을 퇴장 시
키고 그 자리에 개(멍멍이)를 앉혀 놓자. 다시 1 이라는 주사위 3 개를 밀어 주
자.
<문제> 개는 어떤 표정을 지을까 ?
그럼 이제 개를 퇴장 시키고 CPU를 앉혀 놓고 다시 1 이라는 주사위 3 개를 밀어
주자.
<문제> CPU는 어떤 표정을 지을까 ?
내가 이 이야기를 하는 이유를 아실것이다. 6각형 주사위는 사람들이나
갖고 노는 것이지 그 외의 다른 "것"들에게는 아무 의미가 없다는 것을 우리는
알아야 한다.
개를 놀라게 하려면 개말(멍멍이 언어)로 "으르릉" 거리면 될것이다,
CPU를 놀라게 하려면 CPU말(machine language)을 써야 하는데, 그것은 정확하게
256각형 주사위 에 해당하는 "256가지의 숫자"들이다.
왜 하필 256 각형 인가 하면 한 "바이트"가 256가지 숫자를 나타 낼 수
있기 때문이다.
그래서 우리가 CPU에게 일을 시킬 때는 반드시 숫자를 보내줘야 한다.
그것도 반드시 자기가 알아 듣는 256각형 주사위의 숫자중에 하나를....
이와같이 프로그램이란 "짓"은 사실상, 인간이 기계에게 전적으로 맞춰
주어야 하는 정말 개(멍멍이) 같은 일이다.
그래서 우리는 숫자 체계도 바꿔야 한다. 우리는 보통 물건 살 때 "일
십 백 천" 하는 십진법을 쓴다. 그러나 우리는 이제부터 "일 이 사 팔" 하는 2진
법/16진법에 더 익숙해져야 한다. 여러분의 머리도 점점 기계화 되어 가야 하는
것이다.
컴퓨터를 오래 하다보면 (나만 그런지는 몰라도) 사실상 그런 경향이 있
는 듯하다. 즉 모든 문제가 "Yes" 아니면 "No" 이다. "예쁜 것 같다" 이런 표현
은 컴퓨터 세계에서는 에러(Error)다. "이쁘다" 아니면 "못생겼다" 우리는 이 둘
중에 하나만 택해야 한다. 이처럼 컴퓨터의 세계는 삭막하기 짝이 없다. C는 그
나마 좀 더 인간적으로 프로그램을 짜보자고 주로 영어의 단어들로 구성되고, 수
학 시간의 연산공식 같은 것이 많이 등장하지만 기본적인 문제는 같다.
아직도 C를 배우고 싶으신지 모르겠다...
좌우간 이제부터 우리모두 기계가 되서 약속을 하나 하자 내가 앞으로
256 각형 주사위를 여러분에게 하나 주는것은 한 바이트를 주는것이다. 두개를
동시에 주면 2 바이트 이다. 4개를 동시에 줄 수도 있다. 4 바이트 이다.
(3개를 주지는 않는다)
이 주사위는 사람의 주사위와는 달리 0 부터 씌여 있다. 256각형 이므로
따라서, 맨끝 숫자는 255 이다(256이 아니고) 10진수로 하니까 외우기 힘든 255
인데 이걸 16 진법으로 하면 0x00 부터 0xff 까지 이다.
"기계어" 라는게 이런 식이다. 예를들어 내가 CPU에게 주사위 눈금 "33"
을 준다. 이건 무슨 뜻인가 ? 우리 인간에게는 아무 의미가 없지만 CPU에게는
"더해라" 라는 명령어로 들린다. 그러면 그다음 부터 들어오는 "두개의 주사위
값"을 읽어서 무조건 더하도록 만들어져 있다.
그래서 다시 예를 들면 (정확히 이런 기계어는 없지만 설명을 위해서 예
를 든다)) 내가 주사위 [33] [33] [33] 3 개를 주었다고 하자. CPU는 66 이라는
값을 계산한다. 처음 보는 사람은, 두번째도 더하라는 "명령어" 인데 CPU가 어
떻게 구별하나 하고 의심 할 지도 모르겠다. 그건 무조건 들어오는 차례에 따른
다. 즉 처음 들어온 주사위가 33 이라는 명령어로 인식 뻍으면, 이 명령어의 경
우는, " 이 다음 부터 들어오는 주사위 2개는 무조건 데이타 이다"하는 식으로
약속이 이미 되있는것이다. (이건 INTEL 에 근무하는 사람들이 CPU를 만들 때 해
논 약속이다. 우리는 그대로 따라서 쓸 뿐이고..)
그러므로 그 다음에 아무리 똑같은 [33]이 들어와도 이것은 "더할 값"으
로 인식 되는 것일 뿐이다.
하나더 예를 들면 "55"라는 값은 "뒤집어" 라는 명령 이라고 하자. 그러
면 55 00 이라는 값을 차례로 주면 CPU 내부에 결과는 ff 를 갖고있다. 여기서
뒤집는것은 0 -> 1로 1 -> 0 으로 하라는 것이다. 이런 경우는 뒤따라 오는 값
이 하나 밖에 없는것이다. 이런 것도 역시 CPU 내부에 이미 약속이 다 되있다.
또 CPU를 죽일 수도 있다. 예를들어 44 를 "죽어(halt)" 라는 명령어라
고 하면, 주사위 44 를 CPU 안에 넣어주면 CPU는 그자리에서 죽어 버린다. 여러
분도 컴퓨터가 갑자기죽어 버리는 걸 본적이 있을것이다. CPU에 44가 들어갔기
때문이다. 그러면 이제 위의 것을 전부 모아서 연속해서 명령을 주자
1. 우리끼리 한국말로 하면 --> "33 하고 33을 더해" " 00 뒤집어" "죽어"
2. 기계어(CPU 말)로 하면 --> 33 33 33 55 00 44
3. C 말로 하면 --> a = 33 + 33; ~00 (C로 죽으라는 말 없음)
자 이제 비교 해 보자. 한국말은 피차 의사소통에 지장이 없을것이다.
기계어는 보다시피 숫자의 나열이기 때문에 의미가 눈에 "팍" 들어 오지를 않는
다. C의 형태는 어느 정도 짐작이 갈것이다.
자 언어의 차이는 이렇다. 여러분은 이제 C 말을 배우려고 하는데 그것
도 결국은 위의 기계어 처럼 바뀌어 져야 CPU에게 의미가 있는것 이다. C 말에서
기계어로 바꿔주는 프로그램이 "컴파일러"라는 것이다. 우리말로 하면 "번역기"
이다.
만일 위 1. 의 한국말을 2. 기계어로 바꿀 수 있는 "컴파일러"만 있다
면 우리는 굳이 영어 C를 안 배워도 상관이 없다.
자 그럼 이런 기초를 가지고 컴파일러에 대한 이해를 다시 한번 확실히
해보자.
===========================================================================
<5> C 컴파일러의 구성에 대하여 (4 부분)
===========================================================================
C 컴파일러의 기능에 대해서는 이해가 되었을 것이고, 컴파일러의 구성
은 아래와 같습니다(교재 [353]). 실제 C 컴파일러 팩키지(package)에는 이 것보
다 훨씬 많은 프로그램이 있지만 그 핵심은 아래와 같이 4 가지입니다.
다음의 내용을 직접 자기 컴퓨터에서 확인하세요 (4 가지 암기 필요)
<1> 컴파일러
아주 큰 프로그램 이지요 이것이 C의 본체 입니다. [37쪽]에는 두개의 파일이 있
는데 내용적으로는 똑같습니다. 차이는 사용자가 pop-up 메뉴가 나오는 메뉴방식
으로 쓸것인가, 아니면 그냥 C:> 상태에서 쓸것인가 하는 정도지요. 보통은
tc.exe를 쓰지요.
<2> 링커
축구 할때 링커의 위치와 하는 역할이 무엇인지 아십니까? 여기서의 역할도 똑같
습니다.중간에서 공격수와 수비수를 묶어 주는 일을 하지요.컴파일이 진행되는
중간 단계에서 오브젝트 들을 묶어주는 일을 합니다. (나중에 설명)
[37쪽]의 파일명을 확인하세요.
<3> 헤더파일
여기서 헤더(header) 란 머리를 얘기합니다. 머리는 몸에서 제일 위에 있지요.
헤더 파일도 여러분이 짜는 C프로그램 중에 제일 위에 있어야 합니다. 확장자는
전부 .h 인데 (header)의 첫글자입니다. 헤더파일은 갯수가 많지요.[34쪽]에 목
록이 나와있습니다. 전부 "보통 글자로 되있기" (이런걸 앞으로는 "text 파일"이
라고 부릅니다) 때문에 보통의 에디터(아래한글, 이야기따위) 에서 불러서 읽어
볼 수 있습니다. 필요 하면 여러분이 직접 만들 수 있는 파일 입니다.
<4>라이브러리
도서관 이라는 뜻이지요. 여러분도 이 파일에서 모든 "함수"를 전부 찾아 볼 수
있습니다. 이것의 확장자도 전부 .lib로 끝나는 데 역시 library 의 앞글자들 입
니다. 이것들은 보통 크기가 크지요. 그리고 필요하면 이것도 직접 만들 수 있습
니다.
<약속> xxx.x : 이건 우리 끼리의 약속 입니다. 앞으로 xxx.x 는 "아무
파일이나"를 의미하는 것으로 합니다.
===========================================================================
<6> 컴파일을 하면 프로그램은 어떻게 바뀌는가 ?
===========================================================================
터보 C에서 에디터 쓸줄 아시지요 ? 에디터의 사용법중에서도 우리가 프
로그램을 직접 짜기위해 필요한 기능을 [42쪽]에 열거해 놓았습니다. 최소한 이
정도 기능은 능숙하게 이용할 수 있어야합니다.
이제 my.c 라는 파일 이름으로 다음과 같이 치세요
#include <stdio.h>
main()
{
printf("Good Morning");
}
딱 5줄입니다. 그리고 [Control] [F9]키를 동시에 누르세요 컴파일이 될겁니다.
이제 터보 씨를 빠져나와서 dir my.* 로 파일을 찾아 보세요
위와 같은 source 프로그램(my.c)은 "컴파일러" 와 "링커"를 거쳐 다음과같은
순서대로 3 형제 파일을만듭니다. 그 도식적인 과정은 [61쪽]에 나와 있습니다.
1> 소스 파일(SOURCE FILE)
여러분이 직접 짠 프로그램 이름은 맘대로 지어도 좋으나 확장자는 꼭
.c 로 만듭시다.( 예) my.c )
2> 오브젝트 파일(OBJECT FILE)
컴파일러가 my.c를 이용해 만든 파일 ( my.obj)
3> 실행파일(EXECUTABLE FILE)
링커가 my.obj를 이용해 만든파일 ( my.exe)
보통은 3개 이름이 똑같으므로 확장자(extention) .c .obj .exe 로 구별하여
한 형제들 이라는 것을 압니다. my.exe 처럼 실행 파일을 만든후에는 언제든지
"my" 하고 리턴 키(enter key) 만 치면 자기가 짠 프로그램을 실행 시킬 수 있습
니다. (단 my.exe 가 있는 디렉토리에 가서 )
===========================================================================
< DOS 상식>
실행 파일 은 3가지 가 있습니다.아래와 같이 확장자가 .exe .com .bat 로 된 파
일은 앞 부분 "xxx" 만 치면 프로그램이 실행 됩니다.
1> xxx.exe
2> xxx.com
3> xxx.bat
우리가 C 소스(source) 프로그램을 짜는 이유는 이중에서 .exe 파일을 만들기 위
함 이지요. .exe 파일이 CPU가 알아듣는 기계어로 가득찬 파일이고,우리는 이과
정을 "컴파일 한다" 라고 얘기합니다.
===========================================================================
<문제> 아래 파일을 3 개씩 관계 있는 것 끼리 묶어 보세요
<문제> 형제 파일 3 개중 파일크기가 가장 큰것은 ?
<문제> 다음 파일 들 중 text 파일은 어떤 것 입니까 ?
<문제> 형제 파일 3 개를 태어난 순서대로 정렬 하면 ?
<문제> 사람이 직접쳐서 만든 파일은 어떤 것입니까 ?
<문제> .exe 파일은 누가 만듭니까 ?
파일 크기
|
MY OBJ 359 11-27-93 11:30p
MY EXE 4343 11-27-93 11:30p
MY C 15 11-27-93 11:30p
GAME C 15 11-27-93 11:30p
GAME OBJ 365 11-27-93 11:30p
GAME EXE 4349 11-27-93 11:30p
SOUND C 15 11-27-93 11:30p
SOUND OBJ 368 11-27-93 11:30p
SOUND EXE 4352 11-27-93 11:30p
57 file(s) 1299657 bytes
===========================================================================
[2] 함수 소개 및 프로그램 짜기
===========================================================================
<1> 컴파일러 환경 설정
---------------------------------------------------------------------------
컴파일러를 잘 쓰고 있는 사람은 상관 없지만, 처음 컴파일러를 깔아놓
고 환경이 설정되 있지 않은 사람들은 일단 기본적으로 다음과 같은 작업을 해야
합니다.
1. 터보 C 에서 다음과 같은 메뉴를 줄줄이 선택하세요
[Options] [Directories]
그러면 다음과 같은 내용을 볼 수 있을 겁니다.
"Include directories" : <-- (보기 1)
"Library directories" : <-- (보기 2)
"Output directory" : <-- (보기 3)
"Turbo C directory" : <-- (보기 4)
여기다가 정확한 디렉토리 명을 적어 주어야 합니다. 예를 들어
(보기 1) : 이곳에는 위의 헤더 파일(xxx.h)들이 들어가 있는 디렉토리
명을 적는다. 예) c:\tc\include
(보기 2) : 이곳에는 위의 라이브러리 파일(xxx.lib)들이 들어가 있는
디렉토리 명을 적는다. 예) c:\tc\lib
(보기 3) : 이곳에는 컴파일이 끝난 파일 xxx.exe 가 들어갈 디렉토리
명을 적는다. 예) c:\tc\mywork
(보기 4) : 이곳에는 위의 컴파일러 파일(tc.exe)가 들어가 있는 디렉토
리 명을 적는다. 예) c:\tc
2. 새롭게 바꾼 환경을 저장한다. 다음의 메뉴를 줄줄이 선택하고 주어진 이름으
로 저장한다.
[Options] [Save options]
===========================================================================
<2> 에디터 쓰는법
===========================================================================
아래 한글 에디터와, 터보 C 에 내장된 에디터 쓰는법은 익숙하게 쓸 수
있도록 연습을 해야 한다. 이 두가지는 단순히 편지 따위의 텍스트 파일을 만드
는 경우라면 쓰는 방법이 아주 유사하다. 이런 이유는 왕년에 아주 유명했던 에
디터 "워드 스타" 의 사용법을 같이 모방한 것이기 때문이다.
특히 앞으로 프로그램을 짤때는 터보 C 에디터에서 작업을 주로 할 것이
기 때문에 이곳에서의 사용법에 익숙하도록 연습을 해야 한다.
<숙제> 터보 C 에디터에서 특정한 문장을 찾는 기능 [^q] [F] 의 사용법을 익숙
하도록 연습하세요.
<숙제> 터보 C 에디터에서 특정한 문장을 다른 문장으로 바꾸는 기능 [^q] [A]
의 사용법을 익숙하도록 연습하세요.
===========================================================================
<끝 맺으며 >
수고 하셨습니다. 질문이나 의문 사항은 "묻고/답하기"를 이용해 주세요
===========================================================================
자료 감사합니다.^^