검수요청.png검수요청.png

"C 언어"의 두 판 사이의 차이

위키원
이동: 둘러보기, 검색
잔글
잔글 (210.102.52.54(토론)의 편집을 Asadal의 마지막 판으로 되돌림)
 
(사용자 8명의 중간 판 64개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''C''' 또는 '''C 언어'''는 1972년 [[데니스 리치]](Dennis Ritchie)가 미국 [[AT&T]]의 [[벨 연구소]] 시절에 개발한 범용 [[프로그래밍 언어]]이다. 기존의 A 언어와 B 언어를 개량하여 만들었다. 빠른 처리 속도가 필요한 시스템 제어 분야에 많이 사용한다. C 언어를 변형하여, [[C++]], [[C샵|C#]], [[비주얼 C++]], [[엠에프씨]](MFC), [[프로씨]](Pro-C), [[오브젝티브-C]], [[스위프트]], [[러스트]] 등 다양한 프로그래밍 언어가 만들어졌다.
+
[[파일:C 언어 로고.png|썸네일|200픽셀|'''C 언어''']]
 +
[[파일:C 언어 글자.png|썸네일|300픽셀|'''C 언어''']]
 +
[[파일:데니스 리치.jpg|썸네일|200픽셀|'''[[데니스 리치]]'''(Dennis Ritchie)]]
 +
 
 +
'''C''' 또는 '''C 언어'''는 1972년 '''[[데니스 리치]]'''(Dennis Ritchie)가 미국 [[AT&T]]의 벨 연구소 시절에 개발한 범용 [[프로그래밍 언어]]이다. 기존의 A 언어와 B 언어를 개량하여 만들었다. 빠른 처리 속도가 필요한 시스템 제어 분야에 많이 사용한다. 비트 조작 등 세밀한 기술이 가능하다는 특징이 있으며, 미니컴퓨터용 운영체제인 유닉스의 대부분은 C언어로 기술되어 있다.  C 언어를 변형하여, [[C++]], [[C샵|C#]], [[비주얼 C++]], [[엠에프씨]](MFC), [[프로씨]](Pro-C), [[오브젝티브-C]], [[스위프트]], [[러스트]] 등 다양한 프로그래밍 언어가 만들어졌다.
  
 
== 역사 ==
 
== 역사 ==
[[알골]] -> [[BCPL]] -> [[B]] 언어로 개조되는 과정에서 발생
+
[[알골]](ALGOL) -> BCPL -> B 언어의 개발 과정으로 인해 C언어를 개발하였다. 1963년 ALGOL60 보다 더 다양한 용도로 확장하기 위해 CPL 언어를 케임브리지 대학교의 수학 연구소와 런던 대학교의 컴퓨터 공학부에서 공동 개발하였다. 이후 1967년 마틴 리차드는 CPL을 더욱 단순화 시킨 BCPL(Basic CPL)을 개발하였고, 1969년 경 BCPL이 미국으로 넘어와서 켄 톰슨에 의해 B 언어를 개발하였다. 여기까지를 C언어의 조상 격 프로그래밍 언어로 보고 있다. <ref name="C 언어 역사"> luckey, 〈[https://blog.makebyhand.co.kr/43 C언어의 유래와 역사]〉, 《티스토리》, 2009-03-19</ref>
<ref name="C 언어 역사"> luckey, 〈[https://blog.makebyhand.co.kr/43 C언어의 유래와 역사]〉, 《makebyhand 블로그》, 2009-03-19</ref>
+
 
 +
=== 등장 배경 ===
 +
 
 +
* [[켄 톰슨]](Ken Thompseon)이 벨 연구소에서 MULTICS 운영체제를 개조하여 [[유닉스]]를 만들던 중 기계마다 운영체제를 제작하다시피 하여 만드는 애로사항을 해결하고자 이식성이 좋고, 호환성이 좋은 언어로 제작하여야겠다는 필요성을 가졌다.
 +
: 이때 데니스 리치(Dennis Ritchie)가 B 언어를 개조하여 1972년 C 언어를 제작하고, 이를 이용하여 유닉스를 다시 만들게 된다.
 +
 
 +
* 사용자가 늘어남에 따라 매뉴얼이나 지속적인 작업이 이루어지지 않아 초기에 개발 회사나 사용 회사별로 C 언어가 혼란을 겪게 된다.
 +
 
 +
* 미국 ANSI 협회에서 ANSI-C를 규정하고 이때부터 ANSI-C를 표준으로 각 회사들이 개성 있게 제작을 시작한다.
  
=== 발생 동기 ===
 
* [[케네스 톰슨]](Ken Thompseon)이 [[벨 연구소]]에서 [[MULTICS]] 운영체제를 개조하여 [[유닉스]]를 만들던 중 기계마다 운영체계를 제작 하다시피 하여 만드는 애로사항을 해결하고자 이식성이 좋고, 호환성이 좋은 언어로 제작하여야겠다는 필요성을 가졌다.
 
이때 [[데니스 리치]](Dennis Ritchie)가 B 언어를 개조하여 1972년 C언어를 제작하고, 이를 이용하여 유닉스를 다시 만들게 된다.
 
* 사용자가 늘어남에 따라 매뉴얼이나 지속적인 작업이 이루어지지 않아 초기에 개발회사나 사용회사별로 C 언어가 혼란을 겪게 된다.
 
* 미국 [[ANSI]]협회에서 [[ANSI-C]]를 규정하고 이때부터 ANSI-C를 표준으로 각 회사들이 개성있게 제작을 시작한다.
 
 
* 이후 1982년 [[C++]]이 개발되며 더욱 성장하게 된다.
 
* 이후 1982년 [[C++]]이 개발되며 더욱 성장하게 된다.
* C 언어를 이용하여 [[자바]], [[C#]], [[엠에프씨]](MFC), [[프로씨]](Pro-C), [[오브젝티브-C]], [[스위프트]], [[러스트]] 등 다양한 프로그래밍 언어가 만들어졌다.
+
 
<ref name="C 언어 역사"></ref>
+
* C 언어를 이용하여 [[자바]], [[C#]], [[엠에프씨]](MFC), [[프로씨]](Pro-C), [[오브젝티브-C]], [[스위프트]], [[러스트]] 등 다양한 프로그래밍 언어가 만들어졌다.<ref name="C 언어 역사"></ref>
  
 
=== 제작 과정 ===
 
=== 제작 과정 ===
* 1958년 프로그래밍 언어의 이론과 개념의 등장
+
 
* 1960년 [[국제정보처리학회연합]](IFIP)에서 [[알골]]을 제작
+
* 1958년 : 프로그래밍 언어의 이론과 개념의 등장
* 1966년 케임브리지 대학교에서 [[마틴 리처드]](Martin Richards)가 [[BCPL]]을 설계
+
 
* 1970년 [[톰프슨]](Kenneth L. Thompson)이 BCPL을 개량하여 [[B 언어|B]]를 제작
+
* 1960년 : 국제 정보처리 학회 연합(IFIP)에서 [[알골]]을 제작
* 1972년 [[데니스 리치]](Dennis Ritchie)에 의해 C 언어가 개발
+
 
<ref name="C 언어 역사"></ref>
+
* 1966년 : 케임브리지 대학교에서 마틴 리처드(Martin Richards)가 BCPL을 설계
 +
 
 +
* 1970년 : 톰프슨(Kenneth L. Thompson)이 BCPL을 개량하여 B 언어를 제작
 +
 
 +
* 1972년 : 데니스 리치(Dennis Ritchie)에 의해 C 언어가 개발<ref name="C 언어 역사"></ref>
  
 
== 특징 ==
 
== 특징 ==
=== C 언어의 장점 ===
+
=== C 언어의 특징 ===
 
* 이식성이 뛰어나다.
 
* 이식성이 뛰어나다.
: C 언어는 다른 프로그래밍 언어보다 높은 호환성을 가지고 있고 C 언어의 표준함수로만 작성된 프로그램은 어떤 기종의 컴퓨터에서도 정상적으로 컴파일되고 실행될 수 있다.
+
: C 언어는 다른 프로그래밍 언어보다 높은 호환성을 가지고 있고 C 언어의 표준 함수로만 작성된 프로그램은 어떤 기종의 컴퓨터에서도 정상적으로 컴파일되고 실행될 수 있다.
 +
 
 +
* 양면성 기능을 가지는 언어이다.
 +
: C 언어는 High Level Language와 Low Level Language의 특징을 동시에 가진다. 즉, 저 수준과 고 수준의 제어가 모두 가능한 언어이다.
 +
 
 +
* 다양한 연산자를 가지는 언어이다.
 +
: 다양한 연산자를 가지고 있기 때문에 원하는 방식대로 다양한 프로그래밍이 가능하다.
  
 
* 다양성을 가진다.
 
* 다양성을 가진다.
: C언어는 과학 계산용 프로그램뿐만 아니라 FA(공장 자동화), OA(사무 자동화), GUI(Graphic User interface), 시스템 프로그램(System program), 응용 프로그램(Application Program)과 같이 다양한 분야에서 사용할 수 있도록 설계된 효율적인 프로그램 언어이다.
+
: C 언어는 과학 계산용 프로그램뿐만 아니라 FA(공장 자동화), OA(사무 자동화), GUI(Graphic User interface), 시스템 프로그램(System program), 응용 프로그램(Application Program)과 같이 다양한 분야에서 사용할 수 있도록 설계된 효율적인 프로그램 언어이다.
 +
 
 +
* 모듈러 프로그래밍 언어이다.
 +
: C언어는 함수 기반의 언어이다. 프로그램의 시작인 main 함수와 다양한 여러 함수를 사용하여 간단하게 프로그래밍이 가능하다.
 +
 
 +
* Free Format 코딩 형식을 가지는 언어이다.
 +
: 새로운 자료형(struct)을 정의하여 사용할 수 있으므로 형식이 자유롭다.
 +
 
 +
* 전처리기를 사용하는 언어이다.
 +
: 컴파일(실행) 전 사전적으로 확인이 가능한 기능을 가짐으로써 전체적인 흐름 분석을 하기 용이하다.
 +
 
 +
* 포인터를 사용하는 언어이다.
 +
: 메모리를 직접 제어할 수 있어 위험도가 높지만 디테일한 코딩이 가능하다. 포인터의 사용은 C언어에서만 가능하다.
  
* 절차 지향적 특징을 지니고 있다.<ref name="장단점">ashly77, 〈[http://blog.naver.com/PostView.nhn?blogId=ashly77&logNo=120125897912 C언어의 특징, C언어의 정의, C언어의 장단점]〉, 《네이버 블로그》, 2011-03-14</ref>
+
* 절차 지향적 특징을 지니고 있다.<ref name="특징">gloss62,〈[https://cafe.naver.com/cmenia/1612 [강좌] 01 C언어 개요]〉,《네이버 카페》, 2009-08-26</ref>
  
 
=== C 언어의 단점 ===
 
=== C 언어의 단점 ===
 
* [[유닉스]]를 기술하기 위한 언어로서 개발되었기 때문에 유닉스가 가진 약점을 그대로 가지고 있다.
 
* [[유닉스]]를 기술하기 위한 언어로서 개발되었기 때문에 유닉스가 가진 약점을 그대로 가지고 있다.
  
* 자료형의 검사기능이 미약하다.
+
* 자료형의 검사 기능이 미약하다.
 +
 
 +
* 혼합 연산의 경우 연산 우선순위에 따라 자동 계산되므로 연산 우선순위를 모르면 잘못된 계산 결과를 얻을 수 있다.
 +
 
 +
* 프로그램을 모듈화하지 않으면 이해하기 어려운 프로그램이 되는 경우가 많다.<ref name="특징"></ref>
 +
 
 +
=== 다른 컴퓨터 언어와 비교 ===
 +
 
 +
==== C 언어와 [[C++]] ====
 +
C언어는 절차지향적 언어(Procedural)이고, C++은 객체지향적 언어(Multi Paradigm)이다.
 +
하지만 엄밀히 따지면 C++은 멀티 패러다임 언어이며 객체지향과 절차지향 모두 구현이 가능하다. C를 한 단계 확장시킨 언어이다. C는 절차적 언어이기 때문에 순차적 수행이 되도록 하는 것이 중요하다. 하지만 C++은 추상적인 개념을 통해서 구성을 한 후 그것들을 조합하는 방식으로 만들어진다. 즉, C는 하향식 접근 방식으로 코딩을 하지만 C++은 상향식 접근 방식으로 코딩하는 것을 선호하는 언어이다. C++은 물론 하향식 접근 방식으로도 코딩이 가능하다. <ref>JJOREG, 〈[https://jjoreg.tistory.com/entry/C-%EA%B3%BC-C%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90 C++ 과 C의 차이점]〉,  《티스토리》, 2014-06-25</ref>
 +
 
 +
==== C 언어와 [[자바]] ====
 +
자바 또한 객체지향 언어로 개발된 지 오래 지났음에도 불구하고 여전히 소프트웨어 개발의 주축이다. 기계와 근접한 위치에서 실행되거나 하드웨어를 직접 다루는 경우 C 언어는 컴파일 시 바로 기계코드로 컴파일이 되어 프로세스에 의해 직접 실행된다. 따라서 중간 코드인 바이트 코드로 컴파일되며 인터프리터가 바이트 코드를 기계코드로 다시 변환하는 자바의 경우 제한된 메모리를 최적으로 사용해야 하는 프로그램에는 C 언어가 유용하다. <ref>Serdar Yegulalp, 〈[http://www.itworld.co.kr/news/124767 C 프로그래밍 언어가 여전히 최고인 이유 : 개발언어 일대일 비교]〉,《아이티월드》, 2018-06-222</ref>
 +
 
 +
==== C 언어와 [[C#]] ====
 +
C#이라는 언어는 자바를 MS에서 만들어낸 J#이라는 언어를 보완해서 만들어낸 언어이다. C, C++, 자바의 장점들을 모아 만들었지만 C보다는 자바와 더 비슷한 언어이다. 하지만 C#은 장점이 많은 만큼 단점도 많은 언어이다. C#의 경우에는 윈도우에서만 사용이 가능하다. .NET(닷넷)라는 프로그램을 사용하는데 닷넷은 윈도우에서밖에 설치가 되지 않기 때문에 윈도우가 아닐 경우 사용할 수 없다. C#의 가장 큰 단점이라고 할 수 있다. 그리고 C와 C++에 비해 속도가 느리다는 단점도 가지고 있다. <ref>donggyun07, 〈[http://blog.naver.com/PostView.nhn?blogId=donggyun07&logNo=150107725971 C와 C++, C#의 차이점과 장단점은 무엇일까요~?]〉, 《네이버 블로그》, 2011-04-29</ref>
  
* 혼합연산의 경우 연산 우선순위에 따라 자동 계산되므로 연산 우선순위를 모르면 잘못된 계산 결과를 얻을 수 있다.
+
==== C 언어와 [[파이썬]] ====
 +
파이썬의 경우에는 C언어와 비교하여 문법이 간결하여 가독성이 높다는 장점이 있다. 또한 C언어에서는 변수의 자료형을 선언하고 프로그래밍을 하지만 파이썬의 경우 프로그램을 입력, 시동하는 동시에 자료형이 결정된다. 하지만 C언어와 C++ 그리고 자바와는 다르게 아직까지 국내에서 인지도가 많이 떨어지는 편이기 때문에 독학을 한다던가 자료를 구하기에 어려움이 조금 있다.<ref>TOPCIT, 〈[https://blog.naver.com/2011topcit/220536327634 프로그래밍 언어의 종류와 차이점]〉, 《네이버 블로그》, 2015-11-11</ref>
  
* 프로그램을 모듈화하지 않으면 이해하기 어려운 프로그램이 되는 경우가 많다.
+
== 활용 분야 ==
<ref name="장단점"></ref>
+
* C 언어는 까다롭고 다루기 어렵지만, 빠른 연산이 필요한 곳에서 높은 효율을 발휘한다. 게임처럼 용량이 높으면서도 연산과 속도가 빨라야 하는 분야에서는 C와 C++을 활용하는 것이 일반적이다.
 +
* 컴퓨터를 사용하는 과정을 단순하게 만들고 한눈에 보기 쉽게 만들어주는 운영체제 및 시스템을 구축하는 분야에도 C언어는 주력으로 사용된다.
 +
* 모바일 프로그래밍의 대표주자는 JAVA이다. 안드로이드의 경우는 JAVA를 주력 언어로 사용 중이지만 IOS(iPhone OS)에서는 C언어를 사용한다. <ref>IT용쌤, 〈[https://m.post.naver.com/viewer/postView.nhn?volumeNo=12596002&memberNo=35415689 C언어 프로그래밍 기초부터 활용하는 분야]〉, 《네이버 블로그》, 2018-01-30</ref>
 +
# 운영 체제 및 시스템
 +
# 마이크로컨트롤러
 +
# 임베디드 시스템
 +
# 빠른 계산속도가 필요한 프로그램
 +
# [[데이터베이스]]
 +
# [[웹서버]]
  
=== [[절차지향 언어]]와 [[객체지향 언어]]의 차이 ===
+
== 기초 문법 ==
 +
=== 메인 함수 ===
 +
C 언어는 절차지향 언어로 main 함수 하나만을 호출하여 main 함수가 끝날 때까지 실행한다.
 +
만약 main 함수에서 다른 함수를 호출하는 경우 해당 경로를 따라가서 해당 함수를 실행 후 다시 메인 함수로 돌아온다.
 +
main 함수는 1개의 프로그램에는 단 하나만 존재할 수 있다. 또한 반드시 하나는 존재해야 한다.
  
==== [[절차지향 언어]] ====
+
=== 헤더 파일의 선언 ===
* 대표적인 절차지향 언어로는 C 언어가 있다.
+
헤더 파일이란 미리 작성해놓은 함수들의 모임이다. 프로그램을 만들 때 가장 앞에 헤더 파일을 선언하여 해당 헤더 파일 안에 있는 함수들을 쓸 수 있게 한다.
* 위에서부터 아래로 정해진 절차(순서)에 따라 실행된다.
+
  #include <stdio.h>
* 프로그래밍 수준이 복잡하지 않고 유지 보수하기가 쉽다.
+
 
* 객체지향보다 코딩 속도가 빠르다.
+
  int main(void) {
<ref name="언어비교"> zzaxowns, 〈[https://blog.naver.com/zzaxowns/221485115641 [C++] 절차지향 언어와 객체지향 언어]〉, 《네이버 블로그》, 2019-03-11</ref>
+
 
 +
    printf("Hello, C");
 +
 
 +
    return 0;
 +
  }
  
==== [[객체지향 언어]] ====
+
이 문장은 printf 함수를 이용해 Hello, C라는 문장을 출력하고자 하는 것이다.
* 대표적인 객체지향 언어로는 [[C++]], [[자바]]가 있다.
+
이때 맨 위에 작성된 #include <stdio.h>는 표준 입출력 헤더 파일인 stdio.h 헤더 파일을 선언하는 부분이다. 이 부분을 작성하지 않으면 main 함수는 printf 함수를 모르기 때문에 오류가 발생한다. 반드시 사용할 함수가 들어있는 헤더 파일을 프로그램의 가장 앞에 선언해야 한다.
* 절차지향으로 해결하지 못할 정도로 많은 기능을 만들게 되면서 복잡해진 코드를 작성하기 위해 등장한 언어
 
* [[추상화]] : 객체들의 공통적인 특징을 뽑아내는 것
 
* [[캡슐화]] : [[데이터 구조]]와 데이터를 다루는 방법을 결합해 묶는 것
 
* [[상속]] : 상위개념의 특징을 하위개념이 물려받는 것
 
* [[다형성]] : 일을 하는 함수를 같은 이름으로 호출해 주는 것
 
<ref name="언어비교"></ref>
 
  
=== 다른 컴퓨터 언어와 비교 ===
+
=== 헤더 파일의 종류 ===
==== C 언어와 C++ ====
+
헤더 파일의 분류는 크게 표준 라이브러리 헤더 파일과 사용자 정의 헤더 파일로 나눌 수 있다.
C 언어는 1972년부터 사용되기 시작해 현재까지 핵심적인 컴퓨터 언어로 사용되고 있다.
+
* 표준 라이브러리 헤더 파일
C 언어는 절차 지향적 언어임에 반해 C 언어의 개량형으로 알려진 C++의 가장 큰 특징은 객체지향 언어이며 광범위함이다.
+
** 표준 라이브러리 헤더 파일은 개발 프로그램의 내부에 미리 선언되어있어 가져와 사용기만 하면 된다.
C++은 추상적인 개념을 통해 구성을 먼저하고 그 후 그것들을 조합하는 상향식 접근 방법으로 만들어진다.
+
*** 해당 헤더 파일의 예로는 stdlib.h , stdio.h , math.h, string.h , time.h 등 다양한 헤더 파일이 있다.
<ref>JJOREG, 〈[https://jjoreg.tistory.com/entry/C-%EA%B3%BC-C%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90 C++ 과 C의 차이점]〉, 《티스토리닷컴》, 2014-06-25</ref>
+
 
 +
* 사용자 정의 헤더 파일
 +
** 사용자 정의 헤더 파일은 사용자가 직접 헤더 파일을 정의하는 것을 의미한다.
  
==== C 언어와 자바 ====
+
=== 세미콜론( ; ) ===
자바 또한 객체지향 언어로 지금까지 여러 소프트웨어 개발의 주축이 된다.
+
세미콜론을 안 붙이게 되면 컴파일 에러가 발생한다. 컴파일러는 해석을 할 때 세미콜론(;)을 만나게 되면 문장이 끝났다고 판단한다. 세미콜론을 만나지 못할 경우에는 문장이 끝나지 않은 것으로 해석하기 때문에 컴파일 구문 오류가 발생한다.
기계와 근접한 위치에서 실행되거나 하드웨어를 직접 다루는 경우 C 언어는 컴파일 시 바로 기계코드로 컴파일이 되어 프로세스에 의해 직접 실행된다.
+
따라서 한 문장이 끝나면 세미콜론( ; )을 쓰는 것으로 마친다.
따라서 중간 코드인 바이트 코드로 컴파일되어 기계코드로 다시 변환하는 자바의 경우 제한된 메모리를 최적으로 사용해야 하는 프로그램에는 C 언어가 유용하다.
+
* 예외의 경우
<ref>Serdar Yegulalp, 〈[http://www.itworld.co.kr/news/124767 C 프로그래밍 언어가 여전히 최고인 이유 : 개발언어 일대일 비교]〉, 《InfoWorld》, 2018-06-22</ref>
+
**if, for, while 문의 경우 해당 문장에는 세미콜론을 쓰지 않는다. (do while의 경우 while 문이지만 세미콜론을 붙인다.)
  
 
== 개발도구 ==
 
== 개발도구 ==
[[파일:Visual studio logo 1.png|썸네일|300픽셀|'''Visual Studio'''(Visual Studio) 로고]]
+
[[파일:Visual studio logo 1.png|썸네일|350픽셀|'''Visual Studio'''(Visual Studio) 로고]]
 
# [https://visualstudio.microsoft.com/ 비주얼 스튜디오]
 
# [https://visualstudio.microsoft.com/ 비주얼 스튜디오]
# [http://orwelldevcpp.blogspot.com/ dev C++]
+
#: C 언어 개발 도구로 가장 유명하며 마이크로소프트에서 개발, 2년마다 새로운 버전이 개발되고 있다.
# [http://www.codeblocks.org/ Code::Blocks]
+
# [http://orwelldevcpp.blogspot.com/ dev C++]<ref name="개발도구">magnetah, 〈[https://blog.naver.com/magnetah/221257011286 재미 삼아 코딩 <C언어> 프로그램 개발도구에 대하여 : 통합 개발 환경 종류]〉, 《네이버 블로그》, 2018-04-19</ref>
# [http://ideone.com/ ideone 웹페이지 개발]
+
#: 무료 오픈소스 개발도구이며 비주얼 스튜디오보다 설치가 간단하다.
<ref>magnetah, 〈[https://blog.naver.com/magnetah/221257011286 재미 삼아 코딩 <C언어> 프로그램 개발도구에 대하여 : 통합 개발 환경 종류〉, 《네이버 블로그》, 2018-04-19</ref>
+
# [http://www.codeblocks.org/ Code::Blocks]<ref name="개발도구"></ref>
 +
# [http://ideone.com/ ideone 웹페이지 개발]<ref name="개발도구"></ref>
 +
#: 웹페이지에서 다운로드 없이 개발할 수 있는 장점이 있다.
 +
 
 +
== 전망 ==
 +
C 언어는 B 언어를 기반으로 탄생했다. 지금도 이미 C 언어를 기반으로 혹은 다른 언어들을 기반으로 새로운 언어들이 개발되고 있다. 하지만 현재에도 C 언어는 많은 개발 회사들이 사용하는 주력 언어이다. C 언어의 장점인 간결하고 효율적인 개발이 가능하다는 점 때문이다. 많은 언어들이 C언어 이후에 등장했음에도 C 언어는 여전히 프로그래밍에 있어서 핵심적인 언어로 평가받는다. 특히 임베디드 시스템에서는 큰 인기를 끌고 있다. 앞으로도 오랜 시간 동안 C 언어는 프로그래밍에 있어서 가장 중요한 언어 중 하나일 것이다.
  
 
{{각주}}
 
{{각주}}
 +
 +
== 참고자료 ==
 +
* luckey, 〈[https://blog.makebyhand.co.kr/43 C언어의 유래와 역사]〉, 《티스토리》, 2009-03-19
 +
* gloss62,〈[https://cafe.naver.com/cmenia/1612 [강좌] 01 C언어 개요]〉,《네이버 카페》, 2009-08-26
 +
* JJOREG, 〈[https://jjoreg.tistory.com/entry/C-%EA%B3%BC-C%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90 C++ 과 C의 차이점]〉, 《티스토리》, 2014-06-25
 +
* Serdar Yegulalp, 〈[http://www.itworld.co.kr/news/124767 C 프로그래밍 언어가 여전히 최고인 이유 : 개발언어 일대일 비교]〉, 《아이티월드》, 2018-06-22
 +
* IT용쌤, 〈[https://m.post.naver.com/viewer/postView.nhn?volumeNo=12596002&memberNo=35415689 C언어 프로그래밍 기초부터 활용하는 분야]〉, 《네이버 블로그》, 2018-01-30
 +
* magnetah, 〈[https://blog.naver.com/magnetah/221257011286 재미 삼아 코딩 <C언어> 프로그램 개발도구에 대하여 : 통합 개발 환경 종류]〉, 《네이버 블로그》, 2018-04-19
 +
* donggyun07, 〈[http://blog.naver.com/PostView.nhn?blogId=donggyun07&logNo=150107725971 C와 C++, C#의 차이점과 장단점은 무엇일까요~?]〉, 《네이버 블로그》, 2011-04-29
 +
* TOPCIT, 〈[https://blog.naver.com/2011topcit/220536327634 프로그래밍 언어의 종류와 차이점]〉, 《네이버 블로그》, 2015-11-11
  
 
== 같이 보기 ==
 
== 같이 보기 ==
* [[프로그래밍 언어]]
 
 
* [[C++]]
 
* [[C++]]
 +
* [[C#]]
 +
* [[알골]]
 +
* [[유닉스]]
 +
* [[자바]]
  
{{프로그래밍 언어|검토필요}}
+
{{프로그래밍 언어|검토 필요}}

2023년 1월 28일 (토) 12:47 기준 최신판

C 언어
C 언어
데니스 리치(Dennis Ritchie)

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]
  1. 운영 체제 및 시스템
  2. 마이크로컨트롤러
  3. 임베디드 시스템
  4. 빠른 계산속도가 필요한 프로그램
  5. 데이터베이스
  6. 웹서버

기초 문법[편집]

메인 함수[편집]

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 문이지만 세미콜론을 붙인다.)

개발도구[편집]

Visual Studio(Visual Studio) 로고
  1. 비주얼 스튜디오
    C 언어 개발 도구로 가장 유명하며 마이크로소프트에서 개발, 2년마다 새로운 버전이 개발되고 있다.
  2. dev C++[8]
    무료 오픈소스 개발도구이며 비주얼 스튜디오보다 설치가 간단하다.
  3. Code::Blocks[8]
  4. ideone 웹페이지 개발[8]
    웹페이지에서 다운로드 없이 개발할 수 있는 장점이 있다.

전망[편집]

C 언어는 B 언어를 기반으로 탄생했다. 지금도 이미 C 언어를 기반으로 혹은 다른 언어들을 기반으로 새로운 언어들이 개발되고 있다. 하지만 현재에도 C 언어는 많은 개발 회사들이 사용하는 주력 언어이다. C 언어의 장점인 간결하고 효율적인 개발이 가능하다는 점 때문이다. 많은 언어들이 C언어 이후에 등장했음에도 C 언어는 여전히 프로그래밍에 있어서 핵심적인 언어로 평가받는다. 특히 임베디드 시스템에서는 큰 인기를 끌고 있다. 앞으로도 오랜 시간 동안 C 언어는 프로그래밍에 있어서 가장 중요한 언어 중 하나일 것이다.

각주[편집]

  1. 1.0 1.1 1.2 luckey, 〈C언어의 유래와 역사〉, 《티스토리》, 2009-03-19
  2. 2.0 2.1 gloss62,〈[강좌 01 C언어 개요]〉,《네이버 카페》, 2009-08-26
  3. JJOREG, 〈C++ 과 C의 차이점〉, 《티스토리》, 2014-06-25
  4. Serdar Yegulalp, 〈C 프로그래밍 언어가 여전히 최고인 이유 : 개발언어 일대일 비교〉,《아이티월드》, 2018-06-222
  5. donggyun07, 〈C와 C++, C#의 차이점과 장단점은 무엇일까요~?〉, 《네이버 블로그》, 2011-04-29
  6. TOPCIT, 〈프로그래밍 언어의 종류와 차이점〉, 《네이버 블로그》, 2015-11-11
  7. IT용쌤, 〈C언어 프로그래밍 기초부터 활용하는 분야〉, 《네이버 블로그》, 2018-01-30
  8. 8.0 8.1 8.2 magnetah, 〈재미 삼아 코딩 <C언어> 프로그램 개발도구에 대하여 : 통합 개발 환경 종류〉, 《네이버 블로그》, 2018-04-19

참고자료[편집]

같이 보기[편집]


  검수요청.png검수요청.png 이 C 언어 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.