본문 바로가기

Computer

C 언어 이야기


왼쪽으 켄 톰슨과 오른쪽의 데니스 리치



  초기 C 언어의 개발은 1969년 부터 1973년 사이 AT&T 벨 연구소에서 이루어졌다. 보통 C 언어가 컴퓨터의 앞글자 'C' 를 따서 지었다고 생각하겠지만 실제로는 C 언어의 개발자 켄 톰슨 ( Ken Thompson) 에 따르면,  C 언어가 원래 B 언어라는 또 다른 컴퓨터 언어의 발전된 버전이였기에 C 언어라 지었던 것이다.

  C 언어를 개발하게 된 동기는 유닉스 운영체제의 발전과 밀접한 관련이 있다. 그들은 운영체제를 PDP-11 ( 16비트 마이크로프로세서의 컴퓨터 ) 에 이식시키려고 했는데, 그들이 사용하려고 했던 B 언어는 PDP - 11 컴퓨터의 몇가지 주요한 기능들을 사용할 수 없어서 (예를들어 바이트 주소지정방식 등 ) 그들은 C 언어의 초기 버전을 개발하였다.
 
  초기의 PDP - 11 버전의 유닉스 시스템은 어셈블리 언어로 개발되었다. 1973년에 구조체 기능이 추가된 C 언어는 굉장히 강력한 언어가 되어서 어셈블리로 쓰여졌던 유닉스 운영체제의 커널을 C 언어로 다시쓰게 되었다. 이는 어셈블리 언어가 아닌 다른 언어로 쓰여진 최초의 언어 중 하나가 되었다. ( 그 외에도 어셈블리 언어로 쓰여지지 않는 운영체제의 커널은 멀틱스(Multics) 시스템의 PL/I 언어와, Burroughs B5000 는 ALGOL 이다. )

  1978년에 브라이언 커닝핸(Brian Kernighan) 과 데니스 리치(Dennis Ritchie) 는 'The C Programming Language ( C 프로그래밍 언어) '  라는 책의 첫 출판을 하였다. 이 책은 흔히 프로그래머들 사이에서 "K&R" 이라고 불리어 졌으며 이 때문에 책에서 나온 C 언어는 흔히 "K&R C"  라고 불리어졌다. 두번째 에디션의 'The C Programming Language' 는 책 표지에 ANSI C 마크가 부착되어있다.

  K&R 에 나와있는 몇 가지 언어의 중요한 기능들을 살펴보자면 :
  • 표준 입출력 (I/O) 라이브러리
  • long int 데이터 형식
  • unsigned int 데이터 형식
  • 복합 할당 연산자 (compound assignment operators) =op 는 i=-10 과 같이 애매모호한 의미를 띄는 것을 막기 위해 op= 로 바뀌었다. 왜냐하면 i=-10 은 원래 i =- 10 으로 번역되었으나 실제로 프로그래머가 의미하는 것은 i = -10 일 수 도 있기 때문이다.
  1989 C 표준이 발표된 후, 많은 해 동안 K&R C 는 아직도 많은 사람들이 사용하는 언어였다. 왜냐하면 많은 수의 낡은 컴파일러들이 아직도 사용되고 있었고 아주 잘 쓰여진 K&R C 코드는 C 표준도 잘 만족하였다.

  1970 ~ 1980 년 동안 여러 버전의 C 는 수 많은 메인프레임 컴퓨터, 미니 컴퓨터, IBM PC 를 포함한 마이크로 컴퓨터 등에 이식되면서 이에 대한 인기가 치솟았다. 1983년에는 미국 표준 협회 (American National Standards Institute , ANSI ) 는 위원회를 조직해서 X3J11 를 C 의 표준으로 결정하였다. 1989 년에는 표준이 ANSI X3 으로 승인되었다. 이 때 이 버전의 C 언어를 ANSI C 또는 표준 C 라 부르며 가끔씩 C89 라 부르기도 한다.

  1990 년에 ANSI C 표준은 국제 표준화 기구 (International Organization for Standardization, ISO ) 에 의해 흔히 C90 이라 불리던 ISO/IEC 9899:1990 으로 받아들여 졌다. 그 후로 C 표준화 작업이 계속되었다.

  C 표준화 작업의 한 목표는 K&R C 의 비공식적인 기능들을 포함하는 C 를 마드는 것이다. 표준화 위원회는 이전에 포함되지 않았던 함수 프로토 타입 (function prototypes) , void 포인터, 국제 문자표에 대한 지원과 전처리기 등에 대한 사항을 추가시켰다

  C89 는 현재의 여러 C 컴파일러에서도 지원이 되었고 이는 현재의 대부분의 C 코드가 이 언어를 바탕으로 쓰여졌다. 표준 C 로 쓰여진 소프트웨어와 적당한 하드웨어만 있으면 현재의 어떤 플랫폼 에서도 상당히 잘 작동할 수 있다.

   C 언어가 가장 필요한 부분은 임베디드 시스템이나 운영체제와 같은 시스템 프로그래밍에서다. 코드의 효율이나 특정한 하드웨어 주소 접근 능력 등과 같은 것들 때문에 시스템 프로그래밍에 매우 적합하다. 또한 C 는 비록 프로그램의 크기가 커질 수록 복잡히 진다는 단점이 있지만 엔드-유저(end-user) 프로그램에 매우 많이 이식되어 있다. C 가 매우 많이 사용됨에 따라 라이브러리, 컴파일러,  그리고 다른 언어의 컴파일러 들이 모두 C 로 작성되어 있다.

참고로 C Programming Language 2nd 책은 여기 e-book 으로 올렸으니 참고하기 바란다.

참고자료 : http://en.wikipedia.org/wiki/C_(programming_language)