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

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

위키원
이동: 둘러보기, 검색
잔글 (210.102.52.54(토론)의 편집을 Asadal의 마지막 판으로 되돌림)
 
(사용자 8명의 중간 판 65개는 보이지 않습니다)
1번째 줄: 1번째 줄:
'''C''' 또는 '''C 언어'''는 1972년 [[데니스 리치]](Dennis Ritchie)가 미국 [[AT&T]]의 [[벨 연구소]] 시절에 개발한 범용 [[프로그래밍 언어]]이다. 기존의 A 언어와 B 언어를 개량하여 만들었다. 빠른 처리 속도가 필요한 시스템 제어 분야에 많이 사용한다.
+
[[파일:C 언어 로고.png|썸네일|200픽셀|'''C 언어''']]
 +
[[파일:C 언어 글자.png|썸네일|300픽셀|'''C 언어''']]
 +
[[파일:데니스 리치.jpg|썸네일|200픽셀|'''[[데니스 리치]]'''(Dennis Ritchie)]]
  
C 언어를 변형하여, [[C++]], [[C샵|C#]], [[비주얼 C++]], [[엠에프씨]](MFC), [[프로씨]](Pro-C), [[오브젝티브-C]], [[스위프트]], [[러스트]] 등 다양한 프로그래밍 언어가 만들어졌다.
+
'''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언어는 함수 기반의 언어이다. 프로그램의 시작인 main 함수와 다양한 여러 함수를 사용하여 간단하게 프로그래밍이 가능하다.
 +
 +
* Free Format 코딩 형식을 가지는 언어이다.
 +
: 새로운 자료형(struct)을 정의하여 사용할 수 있으므로 형식이 자유롭다.
 +
 +
* 전처리기를 사용하는 언어이다.
 +
: 컴파일(실행) 전 사전적으로 확인이 가능한 기능을 가짐으로써 전체적인 흐름 분석을 하기 용이하다.
  
  C언어는 과학 계산용 프로그램뿐만 아니라 FA(공장 자동화), OA(사무 자동화), GUI(Graphic User interface), 시스템 프로그램(System program), 응용 프로그램(Application Program)과 같이 다양한 분야에서 사용할 있도록 설계된 효율적인 프로그램 언어이다.
+
* 포인터를 사용하는 언어이다.
 +
: 메모리를 직접 제어할 있어 위험도가 높지만 디테일한 코딩이 가능하다. 포인터의 사용은 C언어에서만 가능하다.
  
* 절차 지향적 특징을 지니고 있다.
+
* 절차 지향적 특징을 지니고 있다.<ref name="특징">gloss62,〈[https://cafe.naver.com/cmenia/1612 [강좌] 01 C언어 개요]〉,《네이버 카페》, 2009-08-26</ref>
<ref name="장단점">ashly77, 〈[http://blog.naver.com/PostView.nhn?blogId=ashly77&logNo=120125897912 C언어의 특징, C언어의 정의, C언어의 장단점]〉, 《네이버 블로그》, 2011-03-14</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>
 +
 
 +
== 활용 분야 ==
 +
* 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개의 프로그램에는 단 하나만 존재할 수 있다. 또한 반드시 하나는 존재해야 한다.
  
* 프로그램을 모듈화하지 않으면 이해하기 어려운 프로그램이 되는 경우가 많다.
+
=== 헤더 파일의 선언 ===
<ref name="장단점"></ref>
+
헤더 파일이란 미리 작성해놓은 함수들의 모임이다. 프로그램을 만들 때 가장 앞에 헤더 파일을 선언하여 해당 헤더 파일 안에 있는 함수들을 쓸 수 있게 한다.
 +
  #include <stdio.h>
 +
 
 +
  int main(void) {
 +
 
 +
    printf("Hello, C");
 +
 
 +
    return 0;
 +
  }
  
=== [[절차지향 언어]]와 [[객체지향 언어]]의 차이 ===
+
이 문장은 printf 함수를 이용해 Hello, C라는 문장을 출력하고자 하는 것이다.
==== [[절차지향 언어]] ====
+
이때 맨 위에 작성된 #include <stdio.h>는 표준 입출력 헤더 파일인 stdio.h 헤더 파일을 선언하는 부분이다. 이 부분을 작성하지 않으면 main 함수는 printf 함수를 모르기 때문에 오류가 발생한다. 반드시 사용할 함수가 들어있는 헤더 파일을 프로그램의 가장 앞에 선언해야 한다.
* 대표적인 절차지향 언어로는 C 언어가 있다.
 
* 위에서부터 아래로 정해진 절차(순서)에 따라 실행된다.
 
* 프로그래밍 수준이 복잡하지 않고 유지 보수하기가 쉽다.
 
* 객체지향보다 코딩 속도가 빠르다.
 
<ref name="언어비교"> zzaxowns, 〈[https://blog.naver.com/zzaxowns/221485115641 [C++] 절차지향 언어와 객체지향 언어]〉, 《네이버 블로그》, 2019-03-11</ref>
 
  
==== [[객체지향 언어]] ====
+
=== 헤더 파일의 종류 ===
* 대표적인 객체지향 언어로는 [[C++]], [[자바]]가 있다.
+
헤더 파일의 분류는 크게 표준 라이브러리 헤더 파일과 사용자 정의 헤더 파일로 나눌 수 있다.
* 절차지향으로 해결하지 못할 정도로 많은 기능을 만들게 되면서 복잡해진 코드를 작성하기 위해 등장한 언어
+
* 표준 라이브러리 헤더 파일
* [[추상화]] : 객체들의 공통적인 특징을 뽑아내는 것
+
** 표준 라이브러리 헤더 파일은 개발 프로그램의 내부에 미리 선언되어있어 가져와 사용기만 하면 된다.
* [[캡슐화]] : [[데이터 구조]]와 데이터를 다루는 방법을 결합해 묶는 것
+
*** 해당 헤더 파일의 예로는 stdlib.h , stdio.h , math.h, string.h , time.h 등 다양한 헤더 파일이 있다.
* [[상속]] : 상위개념의 특징을 하위개념이 물려받는 것
 
* [[다형성]] : 일을 하는 함수를 같은 이름으로 호출해 주는 것
 
<ref name="언어비교"></ref>
 
  
=== 다른 컴퓨터 언어와 비교 ===
+
* 사용자 정의 헤더 파일
==== C 언어와 C++ ====
+
** 사용자 정의 헤더 파일은 사용자가 직접 헤더 파일을 정의하는 것을 의미한다.
C 언어는 1972년부터 사용되기 시작해 현재까지 핵심적인 컴퓨터 언어로 사용되고 있다.
 
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 프로그래밍 언어가 여전히 최고인 이유 : 개발언어 일대일 비교]〉, 《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 언어 문서는 프로그래밍에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.