C언어는 프로그래밍 언어이다.
- 프로그래밍 언어란? 사람과 컴파일러가 이해할 수 있는 약속된 형태의 언어를 의미한다. C언어도 이러한 프로그래밍 언어 중 하나이다.
- 컴파일러란? 프로그래밍 언어로 작성한 프로그램을 컴퓨터가 이해할 수 있도록 기계어로 번역하는 역할을 한다. 더불어 이렇게 번역하는 일 자체를 가리켜 '컴파일(compile)'이라 한다.
예시)
한국인(한국어, 영어 가능) → 통역사(영어, 일본어 가능) → 일본인(일본어 가능) : 한국인이 통역사를 통해서 일본인에게 의사소통 가능
한국인(한국어, C언어 가능) → 컴파일러(C언어, 기계어 가능) → 컴퓨터(기계어 가능) : 사람이 컴퓨터에게 의사전달 가능
- 기계어란? 컴퓨터가 이해할 수 있는 0과 1로 구성된 언어체계를 뜻한다. 컴퓨터가 이해할 수 있는 가장 원초적인 언어
- 저급 언어(Low-Level Language): 컴퓨터가 이해하기 쉬운 언어
- 고급 언어(High-Level Language): 사람이 이해하기 쉽도록 작성된 프로그래밍 언어
- 어셈블리어(Assembly Language): 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 저급 언어
- C언어의 장점과 단점
장점
▶ C언어는 절차지향적 특성을 지닌다. 때문에 익숙해지는데 오랜 시간이 걸리지 않는다
절차지향에는 '정해진 순서의 실행흐름'을 중시한다는 의미가 담겨있다. 절차지향 프로그래밍에서 중심이 되는 것은 '순서'이다.
절차지향적 특성의 C언어에 익숙해지는데 오랜 시간이 걸리지 않는 이유는 인간의 일반적인 생각방식은 절차지향에 가깝다(인간은 해야 할 일에 순서를 정한다). 따라서 C언어를 처음 접하는 사람도 조금만 공부하면 쉽게 익숙해질 수 있는 것이다.
▶ C언어로 작성된 프로그램은 이식성이 좋다.
C언어로 작성된 프로그램은 CPU의 종류에 상관없이 실행이 가능하고, 운영체제의 차이에도 덜 민감하다.
▶ C언어로 구현된 프로그램은 좋은 성능을 보인다.
이 장점은 절대적인 것은 아니다. 언어의 특성보다 중요한 것이 만드는 방법이기 때문이다. 즉 어떻게 만드냐에 따라서 성능은 달라질 수 있다.
기본적으로 C언어는 성능에 민감한 소프트웨어의 개발에 주로 사용한다. 사용하는 메모리의 양이 상대적으로 적고, 속도를 저하시키는 요소들을 최소화한 언어이기 때문이다.
C언어는 위의 장점들 이상으로 많은 장점을 가지고 있다.
단점
저급언어의 특성을 함께 지니기 때문에, 고급언어에 비해 더 주의해서 사용해야 한다.
위 단점 이외에도 C언어를 공부하면서 하나씩 알아게게 될 것이다.
C프로그램의 완성과정
- C 프로그램 완성과정의 전체적인 이해

위 그림에서는 하나의 프로그램이 완성되는 과정을 보여주고 있다. 화살표가 흐름의 순서를 나타내며, 마름모 안에 명시된 내용의 성립여부에 따라서 실행의 흐름이 달라진다.
위 그림에서 보이듯이 실행파일을 얻기 위해서는 다음의 세 단계를 반드시 거쳐야 한다.
- 첫 번째 단계 - 프로그램의 작성
- 두 번째 단계 - 작성한 프로그램의 컴파일
- 세 번째 단계 - 컴파일 된 결과물의 링크
컴파일러(compiler): 특정 프로그래밍 언어로 쓰여 있는 문서를 다른 프로그래밍 언어로 옮기는 언어 번역 프로그램을 말한다. 컴파일러는 고급 프로그래밍 언어를 실행 프로그램으로 만들기 위해 저급 프로그래밍 언어로 바꾸는 데 사용된다.
컴파일(compile): 원시 코드에서 목적 코드로 옮기는 과정
소스 코드(source code) 또는 원시 코드: 컴퓨터 프로그램을 사람이 읽을 수 있는 프로그래밍 언어로 기술한 텍스트 파일
목적 코드(Object code) 또는 목적 파일: 컴파일러나 어셈블러가 소스 코드 파일을 컴파일 또는 어셈블해서 생성하는 파일
어셈블러(Assembler): 작성된 어셈블리어를 기계어로 바꿔주는 프로그램
어셈블(Assembly): 컴퓨터 프로그래밍의 저급 언어인 어셈블리어를 기계어로 변환하는 과정
링커(linker) 또는 링크 에디터(link editor): 컴퓨터 과학에서 컴파일러가 만들어낸 하나 이상의 목적 파일을 가져와 이를 단일 실행 프로그램으로 병합하는 프로그램
링크(link): 링커가 하는 과정을 링크라 한다.
빌드(Build): 소스 코드 파일을 실행 가능한 소프트웨어 산출물로 변환하는 과정, 이 과정에서는 소스 코드 파일을 컴파일하고, 링크를 거쳐 실행 파일이나 라이브러리 파일 등을 생성한다.
디버깅(debugging) 또는 디버그(debug): 컴퓨터 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나 비정상적 연산(버그)을 찾아내고 수정하는 작업 과정
위의 세 단계중 세 번째 단계인 링크는 보통 컴파일의 과정에서 함께 진행되기 때문에 프로그램의 완성과정을 '프로그램의 작성'과 '컴파일'의 두 단계로 줄여서 이야기하기도 한다.
댓글