본문 바로가기
상식및정보

C언어의 역사,특징 및 개발순서

by h-man 2021. 9. 17.

C언어의 역사

 

C언어의 기원은 1972년으로 거슬러 올라간다. 당시 AT&T 연구소에 소속된 데니스 리치라는 연구원이 C언어를 설계했다. 이 당시만 하더라도 유닉스(UNIX) 운영 체제에 대한 연구가 주를 이루고 있었다. 이런 유닉스 운영 체제를 개발하기 위해서 어셈블리어가 사용됐는데, 이보다는 좀더 강력하게 하드웨어를 제어할 수 있고 빠르게 프로그램을 작성할 수 있으며 여러 시스템 간에도 호환이 될 수 있는 언어가 필요했다. 이런 필요성에 의해 탄생한 것이 바로 C언어이고, 이 C언어를 사용하여 유닉스가 개발된 것이다. 이후로 유닉스가 더 발전하고 C언어 고유의 강력함과 유연성 때문에 많은 개발 프로그래머들이 C언을 널리 사용하게 되었다. 사용빈도가 높아지면서 운영 체제나 C언어 컴파일러 개발 업체에 따라 여러 버전의 C언어도 나오게 되었다.

 

마침내 1983년에 미국 국립 표준 연구소(American National Standards Institute, ANSI)에서는 C언어의 표준을 정하게 되었는데 이것이 바로 ANSI C이다. 그 후의 모든 C언어는 모두 기본적으로 이 표준을 따르고 있다.

 

이후에는 소프트웨어의 유지 보수 문제가 크게 대두되었고 이러한 문제를 해결하기 위해 프로그래밍 언어에 객체 지향이라는 개념이 접목되기 시작했다. C++언어가 바로 C언어를 기반으로 한 객체 지향의 개념이 추가된 프로그래밍 언어이다.

 

C언어의 특징

 

강력하고 유연함

지금까지 나온 수많은 상용 프로그램들 대다수가 C언어를 사용해서 작성되었다. C언어는 메모리나 하드웨어를 좀 더 쉽게 제어할 수 있고 다른 언어로 작성된 프로그램보다 빠른 기계어 코드를 작성해 준다. 또한 프로그래머에게 좀더 쉽고 빠르게 프로그램을 작성할 수 있도록 간결한 문법과 다양한 연산자, 데이터 형의 변환 등을 제공하고 있다.

 

구조적인 프로그램

C언어를 이용하면 각각의 독립된 함수로 프로그램을 작성할 수가 있다. 따라서 C언어로 구조적인 프로그램을 작성할 수 있고 또 프로그램을 기능별로 나누어 모듈화할 수도 있다. 이런 식으로 구조적인 프로그램을 작성하게 되면 프로그램을 논리적으로 나누어 작성하고, 기존의 함수들을 다시 사용할 수도 있다.

 

이식성

C언어는 또한 이식성이 매우 뛰어나다. 이 때문에 PC에서 작성한 C 프로그램을 유닉스 환경의 워크스테이션에서 프로그램을 거의 수정하지 않고도 컴파일하고 실행할 수 있다.

 

연산자의 다양성

C언어는 타 언어와 비교할 때 비교적 많은 연산자를 제공하고 있다. 이런 특성때문에 C언어를 이용하면 비교적 빠르게 프로그램을 작성할 수 있고 보다 더 세밀하게 프로그램을 제어할 수도 있다.

 

C 프로그램의 개발 순서

 

대체적으로 C 프로그램을 개발하기 위해서는 우선 먼저 소스 코드를 입력하고 다음으로 컴파일과 링크의 작업을 거쳐야 한다.

 

소스코드 입력

C프로그램을 작성하기 위한 가장 첫 단계는 C언어의 문법으로 된 소스 코드를 작성하는 것이다. 소스 코드를 작성할 때에는 일반적인 텍스트 에디터를 사용해서 편집한다. 그리고 이 소스 코드의 확장자는 일반적으로 .c이다. 터보 C나 비주얼 C++같이 통합 환경이 있는 컴파일러라면 통합 환경 안에서 편집하면 좀 더 편하게 소스 코드를 편집할 수 있다.

 

C언어의 예제 소스 코드

1 #include <stdio.h>
2
3 void main(void)
4 {
5       printf("Hello, World!\n");
6 }

 

컴파일

텍스트 파일로 구성된 C언어의 소스 코드를 컴퓨터가 이해할 수 있는 이진(binary) 형태의 기계어 코드로 바꾸는 것을 컴파일이라고 한다. 또 소스 코드를 이진 형태로 컴파일 해주는 프로그램을 컴파일러라고 하고 이렇게 바뀐 이진 형태 파일의 확장자는 .obj 혹은 .o이다. 유닉스에서 cc나 gcc 컴파일러를 이용해서 작업하고 있다면 직접 명령창(커맨드 라인)에서 컴파일러를 실행해야 하고 터보 C나 비주얼 C++ 같은 통합 환경을 사용한다면, 간단히 컴파일 메뉴를 선택해 주면 컴파일을 할 수 있다. 또한 이러한 컴파일 과정에서 C언어의 문법에 어긋나는 프로그램의 잘못된 부분을 컴파일러가 지적하기도 하는데 이러한 부분이 있을 경우에는 프로그램의 오류를 수정하고 다시 컴파일해야 한다.

 

링크

컴파일한 내용은 이진 형태의 파일이지만 이 내용만으로는 프로그램이 실행될 수 없다. 컴파일 과정을 거친 부분은 소스 코드에 대한 내용뿐이기 때문이다. 소스 코드에서 사용한 C언어의 기본 함수나 다른 C언어 파일에 들어 있는 함수에 대한 내용은 소스 코드를 컴파일한 파일에 포함되어 있지 않다. 실행 파일을 만들기 위해서는 이러한 외부 함수를 연결시켜 주어야 한다. 컴파일 과정에서 생성한 .obj 또는 .o 파일을 외부 함수와 연결하여 실행 파일로 만들어 주는 과정을 링크라고 하고 링크를 수행하는 프로그램을 링커라고 한다.

 

실행

컴파일 과정과 링크 과정을 거치고 나면 실행 파일이 생성되고 위 예제 소스 코드를 실행하면 다음과 같은 결과가 출력 된다.

 

Hello, World!

 

댓글