본문 바로가기

프로그래밍 언어/C

[K.N.K C Programming 정리] Chap 1. Introducing C

 

안녕하세요 여러분~ 모두 잘 지내셨는지요?

`K.N.KING C Programming

C언어의 바이블이라고도 불리우는, 그 유명한 K.N.K C programming, Modern Approach 입니다!!

요번시간부터 시작해서 쭉 다뤄볼겁니다 ㅎㅎ 

오늘은 첫번째 챕터부터 다뤄볼건데요, 조오끔 지루할 수도 있는데 그냥 한 번 재밌게 읽어봅시다!

자 그럼 바로 드가봅시다!


 

When Someone Says "I want a programming language in which I need only say What I wish done," give him a lollipop. 


1.1 History of C - C의 역사

origins

C언어는 벨 연구소의 Ken Thompson, Dennis Ritchie 등등 에 의해 만들어진 UNIX 운영체제의 부산물이다.

초창기 UNIX OS는 이 당시 다른 언어와 마찬가지로 어셈블리어로 쓰여졌다. 

그런데 어셈블리어로 쓰여진 프로그램들은 디버깅과 품질을 향상시키기 너무 어려웠고, UNIX도 그 예외는 아니었다.

Thompson은 UNIX의 향상을 위해 C언어보다 higher - level language의 필요성을 느꼈고, B라는 언어를 만들었다.

그러다 Bell 연구소에서는 PDP-11을 UNIX프로젝트에 적용했는데, B라는 언어가 PDP-11과는 맞지 않았고, 이에 Ritchie는 B언어의 확장판을 만들었다. 이를 NB(New B) 라고 불렀는데 이 NB가 B언어에서 분가(diverge from B)하면서 Ritchie는 NB를 C언어라고 이름을 바꾸었다. 

>>즉, C언어는 운영체제를 만들다가 나온 언어이다!!

 

Standardization

1970년대 무렵 The C Programming Language 라는 C언어 최초의 책이 등장하였다. (K&R 으로 불리기도한다.) 머지 않아 이 책은 C 프로그래머들의 성경과도 같은 책이 되었다.  당시만 해도 C언어의 표준이 없던 상태라 이 책이 곧 C언어의 표준 역할을 수행하였다. C언어가 OS를 다룰때 뿐만 아니라 여러 방면에서 쓰이기도 시작하면서 날로 인기가 솟구치자 이는 몇가지 문제를 야기하게 된다. 가령, K&R은 C언어에서 어떤 부분이 운영체제에 속하는 부분인지 C언어 자체의 기능인지 명확한 구분선을 긋는데 실패하였다. 또한 C언어에 새로운 부분이 추가되고 옛날 내용들은 삭제됨에 따라 점차 완전하고 정확한, 최신의 C언어 표준에 대한 필요성이 대두되었다.

이에 1983년부터 ANSI(American National Standards Institute)의 후원으로 C 표준을 제작하게 되었다.

여러 수정을 거친 후 드디어 1988~1989년에 C언어의 표준이 완성되었고, ISO(International Organization for Standardization)에 의해 ISO/IEC 9899:1990 이 완성된다. 

이를 우리는 C89 혹은 C90 이라고 부른다. 이는 기존의 K&R C와 여러 차이점이 존재한다.

그 후 1995년에 몇가지 변화를 거치고, 1999년에 ISO/IEC 9899:1999 라는 새로운 표준이 제정된다.

이를 우리는 C99 라고 부른다. 

 

C-Based Languagues

C++ : C의 모든 특징들을 포함한다. class 와 객체지향을 더함. 

JAVA : c++에 기반하기에 역시 C의 특징들을 가져감.

C# : c++와 Java로부터 탄생함.

 

C를 배울만한 가치가 있냐고 질문을 던질 수 있다. 첫 번째로 C를 배우는것은 C++, Java 등 C기반 언어들의 특징들을 이해할때 훌륭한 통찰력을 가져다 준다. 두 번째로, C로 쓰여진 프로그램이 매우 많다. 세 번째, 메모리나 처리능력이 제한된 상황속에서나 simplicity가 중요시 되는 상황에서 C는 엄청난 힘을 발휘한다. 

 

 

1.2 Strengths and Weaknesses of C - C의 강점과 약점.

C언어의 강점과 약점은 C언어가 만들어진 이유, 즉 운영체제를 만들기 위한 언어였다는 점에서 비롯된다.

C언어의 철학은 

 - C언어는 low - level language이다. 

System programming에 적합한 언어로서 작용하기 위해 C는 머신 레벨까지 접근을 허용한다. 이는 C계열언어의 특징으로 다른 언어에서는 보통 이를 감추려한다. C는 또한 빨리 실행되기 위해 컴퓨터의 내장된 명령들과 거의 일치하는 명령어를 제공한다. 

 - C는 small language 이다.

C는 제한된 set만을 제공한다. 즉, 그만큼 라이브러리에 많이 의존한다. 

- C는 관대한 언어이다. 

C는 프로그래머 자신이 지금 무엇을 하는지 알고 있다고 믿는다. 즉 프로그래머를 신뢰한다. 따라서 C는 프로그래머에게 보다 넓은 범위의 자유를 선사한다. 

 

 

C의 강점. 

 - 효율성 :  C는 어셈블리어가 사용되던 환경에서 사용되도록 만들어졌기 때문에 메모리가 제한된 상황에서 빠르게 돌아가는것은 C언어에서 매우 중요한 일이다.

 - 이식성(portability) 

 - power : C의 매우 많은 종류의 데이터 타입과 연산자는 강력한 언어가 되는데 일조하였다. 코드 단 몇줄 만으로 많은 것을 해낼 수 있다.

 - 유연함 : 운영체제, 임베디드 시스템, 데이터 프로세싱등 여러 분야에 쓰일 수 잇다. 

 - standard Library : I/O, 문자열 처리, 저장공간할당 등 여러 기능과 관련된 수 많은 함수들이 존재한다.

 - UNIX와의 통합성 : UNIX와 같이 쓰일때 더욱 강력하다.

 

C의 약점

C의 약점은 C의 강점과 같은 곳에서 기인한다.

 - C 프로그램에서는 에러가 발생하기 쉽다. 

 - C프로그램들은 이해하기 어려울 수 있다. : c의 실행시간을 줄이기 위한 간결함 이라는 C의 본성때문에 발생한다. 

 - C프로그램들은 수정하기 어렵다. : C에는 다른 언어들이 제공하는 class 나 패키지같은것들이 부족하다.


쪼오끔 지루한 면이 없지 않아 있죠? 책을 읽을 때는 재밌게 봤는데 막상 글로 쓰려니까 조금 루즈해지네요 하하;;

1단원 까지는 역사책 보듯이 그냥 죽 훑어 봤습니다! 

본격적으로 2단원부터 가보자구요~~

그럼 모두 안녕히 :)