• C언어란
  • Zappy (IP: *.51.113.3)
    조회 수: 4549, 2006-08-29 07:57:12(2006-08-29)
  • 1.1 C 언어 소개



    1969년에... AT&T 연구소의 Ken Thompson은 연구소의 한쪽 구석에 방치되어 있던 작은 컴퓨터를 보고 운영체제 UNIX'의 개발을 시작했습니다. 이 작업에 가담하고 있었던 Dennis Ritchie 이라는 사람이 'C' 라고 하는 언어를 만들었고. 결국 UNIX 는 C 언어로 다시 프로그래밍되었습니다.



    그런데, 왜 이름이 'C' 일까요?



    원래 'CPL(Combined Programming Language)' 이라는 언어가 있었는데, 그 언어에서 'BCPL(Basic CPL)' 이라는 언어가 파생되었고, 다시 그 언어에서 파생한 언어를 BCPL의 선두 문자를 따서 'B' 라고 이름을 붙였습니다. C 언어는 다시 그 B 언어에서 파생되었기 때문에 BCPL의 2번째 문자를 따서 (혹은 B의 다음 알파벳을 따서) 'C' 라고 지어졌다고 합니다.

    요약하자면 C언어는 UNIX 운영체제 하에서 시스템 프로그래밍을 하기 위해 개발된 아주 강력한 기능을 가진프로그래밍 언어입니다.



    C 언어는 구조화 프로그래밍을 지향하는 언어이고 정말로 가장 쓸모있는 언어라고 할 수 있습니다. 이유는 C 언어에서는 못하는게 없기 때문이죠. 좀 과장된 표현 같기도 하지만 다른 언어들과 비교해 볼 때 못하는 거란 없습니다. 그리고 C 언어로 만든 프로그램의 속도는 어셈블리어만큼이나 빠른 속도를 내기 때문에 빠른 속도를 요구하는 프로그램에도 적합하죠.




    단 게임과 같은 곳에서는 C 언어의 속도조차도 느리기 때문에 어셈블리가 요구되는 곳이 있지만, 요즘C 언어 컴파일러들은 인라인 어셈블러라는 것을 지원해서 C 소스 내에 어셈블리 코드를 추가할 수 있습니다. 이런 점으로 볼때 C로는 못하는게 없다고 봐도 되겠죠? 그래도 실감이 나지 않으시면 C 언어로 만들어진 대표적인 프로그램을 예로 들어 볼까요?



    그런데 그럴려면 한가지 문제가 있네요. 이 문제가 뭐냐 하면... C언어로 만들어진 유명한 프로그램이 너무나도 많다는 것이죠.그래도 몇 가지 예를 들어 보죠. 우선 OS에서는 UNIX의 커널의 일부분을 제외한 모든 부분이 C로 만들어졌습니다. 정말 굉장하죠? 그리고 Windows 95(98)도 커널의 일부분과 *.VxD만 빼면 모두 C 로 만들어졌습니다.




    그것두 우리가 잘 알고 있는 Visual C++의 버전 2.1로 만들어졌죠.또 하나 굉장한 사실이 있는데.. Windows NT는 커널 부분까지 C 로 만들어졌다는 것이죠. C 언어로 만들어진 프로그램에는 게임도 많은데, 대부분의 게임은C 언어로 만들어졌다고 보면 됩니다. 예전의 도스용 게임을 시작할 때



    DOS/4GW Protected Mode Run-time Version 1.97



    Copyright (c) Rational Systems Inc. ............



    이런 것을 많이 보셨을 겁니다. 유명한 게임을 시작할 땐 다 이게 나오는데, 이게 나오는 건 C 언어도 만들어진 것입니다. Watcom C++라는 개발 툴로 만들어진 것이죠. 또 한가지 놀라운 사실이 있는데, C 언어 컴파일러도 C 언어로 만든다는 것이죠.



    1 .2 C 언어에는 어떤종류가 있나요?



    'C 언어에는 어떤 종류가...'라는 제목을 보고 글이 자꾸 읽고 싶어 지신다면 그 분은 분명 C 언어 초보자입니다. 하지만 이 제목을보고선 무언가 이상하다고 느끼시면 진정한 전문가라고 할 수 있죠.



    이유가 궁금하시죠? 이유는 C 언어에는 종류가 없기 때문이죠. 종류가 없는데 제목이 저러니 당연히 이상할 수 밖에요. C 를 처음 하시는 분들이 많이 질문하시는 것들 중 하나가 'C 와 Visual C의 차이점이 무엇인가요?' 입니다. 제가 이 질문을 받았다면 이렇게 답해드리고 싶군요. 'C 는 언어이고 Visual C 는 언어가 아닙니다.' 라구요.




    여기서 Visual C 라는 건 Microsoft라는 회사에서 만든 C 언어로 프로그래밍할 때 필요한 도구를 말합니다. 즉 언어가 아니라는 것이죠. 단지 C 언어로 프로그래밍을 할 때 필요한 도구에 지나지 않습니다. 언어는 바로 C 이죠. 그러므로 Visual C 와 Borland C 등은 문법에선 차이가 있을 수 없습니다.



    정리하면 C는 언어이고, Visual C, Borland C 등은 언어가 아니라 C 언어를 사용해 프로그램을 제작하기 위한 도구이며, 모두 C 언어 프로그램을 제작하기 위한 도구이므로 기본 문법의 차이는 있을 수 없다는 것을 꼭 기억하시기 바랍니다. 그리고 여기서 한가지 말씀드릴 것이 있는데, 위에 Visual C 라고 썼지만 실제는 이게 아니고 Visual C++입니다. 그럼 또 한가지 의문이 생기실텐데 Visual C++에서 C++가 아닌 C 언어 프로그램을 작성할 수 있는지 말입니다. 이 의문의 답은 당근 Yes!!입니다.



    C++라는 언어는 C 언어를 객체 지향 프로그래밍이란 것을 할 수 있도록 확장시킨 언어이죠. 그래서 C++언어는 C 언어를 포함한다고할 수 있죠. 그러므로 Visual C++에서 아무리 C++라고 쓰여져 있어도 C 프로그래밍은 가능합니다.



    1 .3 C 언어는 어떻게...



    이제 C 언어 프로그램이 어떻게 실행되는지를 알아봅시다. C 언어로 프로그램을 만들면 실행파일(.EXE)을 만들 수가 있습니다. 실행파일이 만들어질 때는 다음과 같은 과정을 거칩니다.



    (1) 소스 코드 ==텍스트 에디터==> (2) 소스 파일 ==선행처리기==> (3) 선행처리기 지시어가 번역된 소스 파일 ==컴파일러==>(4) 목적 파일(.OBJ) ==링커,라이브러리==> (5) 실행파일(.EXE)



    (1) 소스 코드 (Source)

    프로그램의 내용 자체를 소스 코드라고 합니다.



    (2) 소스 파일 (Source file)

    소스 코드를 텍스트 파일에 기술하여 만들어진 파일을 소스 파일이라고 합니다. C언어의 소스 파일은 확장자가 .C 입니다. C 언어 프로그램 만드는 가장 첫번째 과정이라고 할 수 있죠. (참고로 C++용 소스는 확장자가 .CPP 가 많습니다.)



    (3) 선행처리기 지시어가 번역된 소스 파일

    C 언어 프로그램 내에는 여러가지 지시어들이 있는데 이건 C 언어 문법과는 별개이고 번역도 컴파일러가 하지 않습니다. 이걸 번역하는 프로그램을 선행처리기라고 합니다.



    (4) 목적 파일 (Object file)

    지시어가 번역된 소스 파일은 다음으로 컴파일러라는 프로그램에 의해 기계어로 번역됩니다. 이 번역된 파일을 목적 파일이라고 하고, 확장자는 .OBJ가 됩니다. 그런데 여기서 이상한 점이 있죠? 기계어로 번역하면 실행할 수 있을 건데 왜? Why? 모땀시? 실행파일을 만들지 않고 목적파일이라는 것을 만들까요?




    하지만 기계어로 번역되었다고 해서 실행할 수는 없습니다. 실행파일이 되기 위해선 런타임 라이브러리라는 것이 목적 파일과 합쳐져야 하기 때문이죠. 이 런타임 라이브러리가 무엇인지는 나중에 설명하기로 하고 그냥 런타임 라이브러리라는 것이 합쳐져야 한다는 것만 알아두세요.



    (5) 실행 파일 (Executable file)

    목적파일은 위에서 말한 런타임 라이브러리와 합쳐져서 실행파일이 되는데, 이 때 합쳐주는 프로그램을 링커(Linker)라고 합니다. 링커에 의해 목적 파일은 실행파일이 되죠. 그럼 실행할 수가 있게 됩니다.

    (출처 : 'C언어란' - 네이버 지식iN)

댓글 0

번호 제목 닉네임 조회  등록일 
Zappy 4549 2006-08-29
21 Zappy 5049 2006-10-18
20 Zappy 5161 2006-10-01
19 Zappy 5451 2006-09-05
18 Zappy 5465 2006-02-28
17 Zappy 5557 2006-10-18
16 Zappy 5567 2006-10-18
15 Zappy 5813 2006-10-18
14 Zappy 5935 2006-09-05
13 Zappy 6041 2006-10-18
XE Login