C 언어
C 또는 C 언어는 1972년 데니스 리치(Dennis Ritchie)가 미국 AT&T의 벨 연구소 시절에 개발한 범용 프로그래밍 언어이다. 기존의 A 언어와 B 언어를 개량하여 만들었다. 빠른 처리 속도가 필요한 시스템 제어 분야에 많이 사용한다. 비트 조작 등 세밀한 기술이 가능하다는 특징이 있으며, 미니컴퓨터용 운영체제인 유닉스의 대부분은 C언어로 기술되어 있다. C 언어를 변형하여, C++, C#, 비주얼 C++, 엠에프씨(MFC), 프로씨(Pro-C), 오브젝티브-C, 스위프트, 러스트 등 다양한 프로그래밍 언어가 만들어졌다.
목차
역사
알골(ALGOL) -> BCPL -> B 언어의 개발 과정으로 인해 C언어를 개발하였다. 1963년 ALGOL60 보다 더 다양한 용도로 확장하기 위해 CPL 언어를 케임브리지 대학교의 수학 연구소와 런던 대학교의 컴퓨터 공학부에서 공동 개발하였다. 이후 1967년 마틴 리차드는 CPL을 더욱 단순화 시킨 BCPL(Basic CPL)을 개발하였고, 1969년 경 BCPL이 미국으로 넘어와서 켄 톰슨에 의해 B 언어를 개발하였다. 여기까지를 C언어의 조상 격 프로그래밍 언어로 보고 있다. [1]
등장 배경
- 켄 톰슨(Ken Thompseon)이 벨 연구소에서 MULTICS 운영체제를 개조하여 유닉스를 만들던 중 기계마다 운영체제를 제작하다시피 하여 만드는 애로사항을 해결하고자 이식성이 좋고, 호환성이 좋은 언어로 제작하여야겠다는 필요성을 가졌다.
- 이때 데니스 리치(Dennis Ritchie)가 B 언어를 개조하여 1972년 C 언어를 제작하고, 이를 이용하여 유닉스를 다시 만들게 된다.
- 사용자가 늘어남에 따라 매뉴얼이나 지속적인 작업이 이루어지지 않아 초기에 개발 회사나 사용 회사별로 C 언어가 혼란을 겪게 된다.
- 미국 ANSI 협회에서 ANSI-C를 규정하고 이때부터 ANSI-C를 표준으로 각 회사들이 개성 있게 제작을 시작한다.
- 이후 1982년 C++이 개발되며 더욱 성장하게 된다.
제작 과정
- 1958년 : 프로그래밍 언어의 이론과 개념의 등장
- 1960년 : 국제 정보처리 학회 연합(IFIP)에서 알골을 제작
- 1966년 : 케임브리지 대학교에서 마틴 리처드(Martin Richards)가 BCPL을 설계
- 1970년 : 톰프슨(Kenneth L. Thompson)이 BCPL을 개량하여 B 언어를 제작
- 1972년 : 데니스 리치(Dennis Ritchie)에 의해 C 언어가 개발[1]
특징
C 언어의 특징
- 이식성이 뛰어나다.
- C 언어는 다른 프로그래밍 언어보다 높은 호환성을 가지고 있고 C 언어의 표준 함수로만 작성된 프로그램은 어떤 기종의 컴퓨터에서도 정상적으로 컴파일되고 실행될 수 있다.
- 양면성 기능을 가지는 언어이다.
- C 언어는 High Level Language와 Low Level Language의 특징을 동시에 가진다. 즉, 저 수준과 고 수준의 제어가 모두 가능한 언어이다.
- 다양한 연산자를 가지는 언어이다.
- 다양한 연산자를 가지고 있기 때문에 원하는 방식대로 다양한 프로그래밍이 가능하다.
- 다양성을 가진다.
- C 언어는 과학 계산용 프로그램뿐만 아니라 FA(공장 자동화), OA(사무 자동화), GUI(Graphic User interface), 시스템 프로그램(System program), 응용 프로그램(Application Program)과 같이 다양한 분야에서 사용할 수 있도록 설계된 효율적인 프로그램 언어이다.
- 모듈러 프로그래밍 언어이다.
- C언어는 함수 기반의 언어이다. 프로그램의 시작인 main 함수와 다양한 여러 함수를 사용하여 간단하게 프로그래밍이 가능하다.
- Free Format 코딩 형식을 가지는 언어이다.
- 새로운 자료형(struct)을 정의하여 사용할 수 있으므로 형식이 자유롭다.
- 전처리기를 사용하는 언어이다.
- 컴파일(실행) 전 사전적으로 확인이 가능한 기능을 가짐으로써 전체적인 흐름 분석을 하기 용이하다.
- 포인터를 사용하는 언어이다.
- 메모리를 직접 제어할 수 있어 위험도가 높지만 디테일한 코딩이 가능하다. 포인터의 사용은 C언어에서만 가능하다.
- 절차 지향적 특징을 지니고 있다.[2]
C 언어의 단점
- 유닉스를 기술하기 위한 언어로서 개발되었기 때문에 유닉스가 가진 약점을 그대로 가지고 있다.
- 자료형의 검사 기능이 미약하다.
- 혼합 연산의 경우 연산 우선순위에 따라 자동 계산되므로 연산 우선순위를 모르면 잘못된 계산 결과를 얻을 수 있다.
- 프로그램을 모듈화하지 않으면 이해하기 어려운 프로그램이 되는 경우가 많다.[2]
다른 컴퓨터 언어와 비교
C 언어와 C++
C언어는 절차지향적 언어(Procedural)이고, C++은 객체지향적 언어(Multi Paradigm)이다. 하지만 엄밀히 따지면 C++은 멀티 패러다임 언어이며 객체지향과 절차지향 모두 구현이 가능하다. C를 한 단계 확장시킨 언어이다. C는 절차적 언어이기 때문에 순차적 수행이 되도록 하는 것이 중요하다. 하지만 C++은 추상적인 개념을 통해서 구성을 한 후 그것들을 조합하는 방식으로 만들어진다. 즉, C는 하향식 접근 방식으로 코딩을 하지만 C++은 상향식 접근 방식으로 코딩하는 것을 선호하는 언어이다. C++은 물론 하향식 접근 방식으로도 코딩이 가능하다. [3]
C 언어와 자바
자바 또한 객체지향 언어로 개발된 지 오래 지났음에도 불구하고 여전히 소프트웨어 개발의 주축이다. 기계와 근접한 위치에서 실행되거나 하드웨어를 직접 다루는 경우 C 언어는 컴파일 시 바로 기계코드로 컴파일이 되어 프로세스에 의해 직접 실행된다. 따라서 중간 코드인 바이트 코드로 컴파일되며 인터프리터가 바이트 코드를 기계코드로 다시 변환하는 자바의 경우 제한된 메모리를 최적으로 사용해야 하는 프로그램에는 C 언어가 유용하다. [4]
C 언어와 C#
C#이라는 언어는 자바를 MS에서 만들어낸 J#이라는 언어를 보완해서 만들어낸 언어이다. C, C++, 자바의 장점들을 모아 만들었지만 C보다는 자바와 더 비슷한 언어이다. 하지만 C#은 장점이 많은 만큼 단점도 많은 언어이다. C#의 경우에는 윈도우에서만 사용이 가능하다. .NET(닷넷)라는 프로그램을 사용하는데 닷넷은 윈도우에서밖에 설치가 되지 않기 때문에 윈도우가 아닐 경우 사용할 수 없다. C#의 가장 큰 단점이라고 할 수 있다. 그리고 C와 C++에 비해 속도가 느리다는 단점도 가지고 있다. [5]
C 언어와 파이썬
파이썬의 경우에는 C언어와 비교하여 문법이 간결하여 가독성이 높다는 장점이 있다. 또한 C언어에서는 변수의 자료형을 선언하고 프로그래밍을 하지만 파이썬의 경우 프로그램을 입력, 시동하는 동시에 자료형이 결정된다. 하지만 C언어와 C++ 그리고 자바와는 다르게 아직까지 국내에서 인지도가 많이 떨어지는 편이기 때문에 독학을 한다던가 자료를 구하기에 어려움이 조금 있다.[6]
활용 분야
- C 언어는 까다롭고 다루기 어렵지만, 빠른 연산이 필요한 곳에서 높은 효율을 발휘한다. 게임처럼 용량이 높으면서도 연산과 속도가 빨라야 하는 분야에서는 C와 C++을 활용하는 것이 일반적이다.
- 컴퓨터를 사용하는 과정을 단순하게 만들고 한눈에 보기 쉽게 만들어주는 운영체제 및 시스템을 구축하는 분야에도 C언어는 주력으로 사용된다.
- 모바일 프로그래밍의 대표주자는 JAVA이다. 안드로이드의 경우는 JAVA를 주력 언어로 사용 중이지만 IOS(iPhone OS)에서는 C언어를 사용한다. [7]
기초 문법
메인 함수
C 언어는 절차지향 언어로 main 함수 하나만을 호출하여 main 함수가 끝날 때까지 실행한다. 만약 main 함수에서 다른 함수를 호출하는 경우 해당 경로를 따라가서 해당 함수를 실행 후 다시 메인 함수로 돌아온다. main 함수는 1개의 프로그램에는 단 하나만 존재할 수 있다. 또한 반드시 하나는 존재해야 한다.
헤더 파일의 선언
헤더 파일이란 미리 작성해놓은 함수들의 모임이다. 프로그램을 만들 때 가장 앞에 헤더 파일을 선언하여 해당 헤더 파일 안에 있는 함수들을 쓸 수 있게 한다.
#include <stdio.h> int main(void) { printf("Hello, C"); return 0; }
이 문장은 printf 함수를 이용해 Hello, C라는 문장을 출력하고자 하는 것이다. 이때 맨 위에 작성된 #include <stdio.h>는 표준 입출력 헤더 파일인 stdio.h 헤더 파일을 선언하는 부분이다. 이 부분을 작성하지 않으면 main 함수는 printf 함수를 모르기 때문에 오류가 발생한다. 반드시 사용할 함수가 들어있는 헤더 파일을 프로그램의 가장 앞에 선언해야 한다.
헤더 파일의 종류
헤더 파일의 분류는 크게 표준 라이브러리 헤더 파일과 사용자 정의 헤더 파일로 나눌 수 있다.
- 표준 라이브러리 헤더 파일
- 표준 라이브러리 헤더 파일은 개발 프로그램의 내부에 미리 선언되어있어 가져와 사용기만 하면 된다.
- 해당 헤더 파일의 예로는 stdlib.h , stdio.h , math.h, string.h , time.h 등 다양한 헤더 파일이 있다.
- 표준 라이브러리 헤더 파일은 개발 프로그램의 내부에 미리 선언되어있어 가져와 사용기만 하면 된다.
- 사용자 정의 헤더 파일
- 사용자 정의 헤더 파일은 사용자가 직접 헤더 파일을 정의하는 것을 의미한다.
세미콜론( ; )
세미콜론을 안 붙이게 되면 컴파일 에러가 발생한다. 컴파일러는 해석을 할 때 세미콜론(;)을 만나게 되면 문장이 끝났다고 판단한다. 세미콜론을 만나지 못할 경우에는 문장이 끝나지 않은 것으로 해석하기 때문에 컴파일 구문 오류가 발생한다. 따라서 한 문장이 끝나면 세미콜론( ; )을 쓰는 것으로 마친다.
- 예외의 경우
- if, for, while 문의 경우 해당 문장에는 세미콜론을 쓰지 않는다. (do while의 경우 while 문이지만 세미콜론을 붙인다.)
개발도구
- 비주얼 스튜디오
- C 언어 개발 도구로 가장 유명하며 마이크로소프트에서 개발, 2년마다 새로운 버전이 개발되고 있다.
- dev C++[8]
- 무료 오픈소스 개발도구이며 비주얼 스튜디오보다 설치가 간단하다.
- Code::Blocks[8]
- ideone 웹페이지 개발[8]
- 웹페이지에서 다운로드 없이 개발할 수 있는 장점이 있다.
전망
C 언어는 B 언어를 기반으로 탄생했다. 지금도 이미 C 언어를 기반으로 혹은 다른 언어들을 기반으로 새로운 언어들이 개발되고 있다. 하지만 현재에도 C 언어는 많은 개발 회사들이 사용하는 주력 언어이다. C 언어의 장점인 간결하고 효율적인 개발이 가능하다는 점 때문이다. 많은 언어들이 C언어 이후에 등장했음에도 C 언어는 여전히 프로그래밍에 있어서 핵심적인 언어로 평가받는다. 특히 임베디드 시스템에서는 큰 인기를 끌고 있다. 앞으로도 오랜 시간 동안 C 언어는 프로그래밍에 있어서 가장 중요한 언어 중 하나일 것이다.
각주
- ↑ 1.0 1.1 1.2 luckey, 〈C언어의 유래와 역사〉, 《티스토리》, 2009-03-19
- ↑ 2.0 2.1 gloss62,〈[강좌 01 C언어 개요]〉,《네이버 카페》, 2009-08-26
- ↑ JJOREG, 〈C++ 과 C의 차이점〉, 《티스토리》, 2014-06-25
- ↑ Serdar Yegulalp, 〈C 프로그래밍 언어가 여전히 최고인 이유 : 개발언어 일대일 비교〉,《아이티월드》, 2018-06-222
- ↑ donggyun07, 〈C와 C++, C#의 차이점과 장단점은 무엇일까요~?〉, 《네이버 블로그》, 2011-04-29
- ↑ TOPCIT, 〈프로그래밍 언어의 종류와 차이점〉, 《네이버 블로그》, 2015-11-11
- ↑ IT용쌤, 〈C언어 프로그래밍 기초부터 활용하는 분야〉, 《네이버 블로그》, 2018-01-30
- ↑ 8.0 8.1 8.2 magnetah, 〈재미 삼아 코딩 <C언어> 프로그램 개발도구에 대하여 : 통합 개발 환경 종류〉, 《네이버 블로그》, 2018-04-19
참고자료
- luckey, 〈C언어의 유래와 역사〉, 《티스토리》, 2009-03-19
- gloss62,〈[강좌 01 C언어 개요]〉,《네이버 카페》, 2009-08-26
- JJOREG, 〈C++ 과 C의 차이점〉, 《티스토리》, 2014-06-25
- Serdar Yegulalp, 〈C 프로그래밍 언어가 여전히 최고인 이유 : 개발언어 일대일 비교〉, 《아이티월드》, 2018-06-22
- IT용쌤, 〈C언어 프로그래밍 기초부터 활용하는 분야〉, 《네이버 블로그》, 2018-01-30
- magnetah, 〈재미 삼아 코딩 <C언어> 프로그램 개발도구에 대하여 : 통합 개발 환경 종류〉, 《네이버 블로그》, 2018-04-19
- donggyun07, 〈C와 C++, C#의 차이점과 장단점은 무엇일까요~?〉, 《네이버 블로그》, 2011-04-29
- TOPCIT, 〈프로그래밍 언어의 종류와 차이점〉, 《네이버 블로그》, 2015-11-11
같이 보기