1. C언어의 개념
C언어는 기본적으로 프로그래밍 언어이다.프로그램 언어는 언어 사용 방법이 인간에게 친숙하면 고급 언어 , 인간이 독해하고 이해하는데 어려우면 저급 언어로 나누어 진다. 전자의 예로는 C,C++,C# 후자의 사례는 assembly 언어가 있다.
C 언어는 고급 언어이다. 따라서 인간은 잘 이해할 수 있다. 그러나 , 기계(컴퓨터)는 인간의 언어를 알아 먹지 못한다. 컴퓨터는 0과 1로 이루어진 것만 이해할 수 있기 때문이다. 그래서 , 가운데에서 인간(고급 언어)과 컴퓨터(저급 언어)사이에 의사 소통을 가능하게 하여줄 것이 요구된다. 이 역할을 하는 과정을 컴파일(Compile)이라고 하며 이것의 명칭은 컴파일러 (Compiler)이다.
종합해보자면 다음과 같다. 인간이 고급 언어로 무엇인가(소스 코드)를 작성하면 컴파일러가 이것을 0과 1로 이루어진 기계어로 번역을 하여 주고 컴퓨터가 이 기계어를 이해한 후 특정한 일을 수행한다.
2. 역사와 특징
1971년 에 데니스 리치(Denis Ritchie)와 켄 톰슨(Ken Thompson)이 UNIX 컴퓨터 운영체제의 개발을 위하여 만든 고급(high-level) 언어이다. C언어는 완전히 독창적으로 만들어 진 것은 아니다. 이 언어가 만들어지는 데 많은 영향을 준 언어들이 있다. C언어는 ALGOL ,CPL , BCPL , B언어 등을 바탕으로 탄생 되었다. 그래서, B언어 다음에 등장했다고 이름도 C언어이다. (언어 이름을 참 직관적으로 잘 만들었다). UNIX 운영체제는 원래assembly언어 라는 저급(low-level)언어로 만들어져서 컴퓨터(하드웨어 ,예컨대 cpu)가 바뀌면 프로그램도 함께 바꿔서 다시 작성을 해야 하는 아주 불편한 점이 있었다. 이러한 단점을 주로 보완하기 위해 등장한 언어이다.
3. 장점과 단점
- 절차 지향적 언어이다. 요즘 유행하는 언어들은 대부분 객체 지향적 언어이지만 c언어는 문제 해결을 위한 절차 내지 순서를 중요시 하는 언어이다.이러한 절차 지향적 언어들은 그 언어의 구조가 컴퓨터가 문제를 처리하는 구조와 유사하므로 객체 지향적 언어들에 비하여 상대적으로 하드웨어에 적합하다.
- 이식성(portability)이 우수하다. 그래서 ,기종이 다른 컴퓨터라 하여도 프로그램을 만드는데 편리하다. C언어로 만든 프로그램은 대형 컴퓨터에서 혹은 가정용 컴퓨터에서도 다른 언어에 비하여 상대적으로 잘 수행 된다. 그리고 본래적 의미의 컴퓨터가 아닌 소형 기계들의 임베디드 시스템에서 다른 언어들에 비하여 자주 사용된다.
- C언어로 작성된 프로그램은 처리 속도가 비교적 빠르다. 태생 자체가 기계 즉 하드웨어에 적합한 assembly 언어를 대체하기 위한 목적이었기 때문이다.
- 메모리를 비교적 적게 사용하는 반면에 메모리 관련하여 일반인이 쉽게 접근하기 어려운 점이 있다. 예컨대 , 포인터의 경우가 그러하다. java의 경우 garbage collector가 있어서 매우 편리한데 c언어는 그런거 없다. 프로그램 작성하는 본인이 알아서 메모리 관리도 해야 한다. 힘들고 짜증 나는 일이다.
- 또 다른 단점은 유지 보수하기가 쉽지 않다는 것이다. 그 언어의 구조가 간결하고 절차 지향적이라서 기계에 적합한 언어이므로 처리 속도가 빠른 반면 타인이 작성한 C프로그램을 수정하여 유지 보수하기가 쉽지 않다. 간결한 만큼 무슨 의도로 코드를 작성했는지 이해하기가 어려운 경우가 많기 때문이다.
- 에러를 찾기가 까다롭다. 다른 언어들에선 쉽게 찾아 지는 것이 C컴파일러는 발견 못하는 경우가 다소 있다. 개발자가 상당한 주의를 기울이지 않는다면 에러를 찾다가 시간이 다 가버린다.