C (프로그래밍 언어): 두 판 사이의 차이

잔글 (문법오류를 수정하고 문장을 간결하게 고쳤습니다.)
편집 요약 없음
28번째 줄: 28번째 줄:
국제 표준이 나오기 이전의 C문법이다, C 개발자가 사용했던 문법이다.
국제 표준이 나오기 이전의 C문법이다, C 개발자가 사용했던 문법이다.
=== ANSI C ===
=== ANSI C ===
국제 표준으로 등록된 문법 및 라이브러리며, 현재까지도 대다수의 C프로그래머들은 이 표준을 사용한다. {{취소선|C99,C11은 장식이다}}
국제 표준으로 등록된 문법 및 라이브러리며, 현재까지도 대다수의 C프로그래머들은 이 표준을 사용한다. {{취소선|C99,C11은 장식이다}} 소스코드 [[정적 분석]]을 하는 사람들도 대상 코드를 ANSI C로 잡는 경우가 대다수라서 앞으로도 대격변이 있지 않은 이상, 이 표준 이외의 표준이 주류가 되기는 어려울 것으로 보인다.
=== C99 ===
=== C99 ===
그동안 발전이 뒤쳐져서 새로운 표준이 등록되었다. 진위형(bool)이나 인라인 함수, 변수 선언 제약의 완화등이 있으나, VC에서 지원하지 않아 잊혀졌다.
그동안 발전이 뒤쳐져서 새로운 표준이 등록되었다. 진위형(bool)이나 인라인 함수, 변수 선언 제약의 완화등이 있으나, VC에서 지원하지 않아 잊혀졌다.

2015년 5월 1일 (금) 14:51 판

C 프로그래밍 언어는 1972년에 데니스 리치에 의해 UNIX를 개발하기 위하여 만들어진 프로그래밍 언어이다. UNIX 시스템의 창시자라고 할 수 있는 켄 톰슨에 의하면, C언어와 UNIX를 만들고자 했던 결정적인 동기는 당시 그들이 몸담고 있던 벨 연구소의 직원들이 게임덕후였기 때문에 컴퓨터의 종류나 연식에 관계없이 자기들이 하던 게임을 돌리고자 했기 때문이라고 한다. [1]

특징

  • 절차적 프로그래밍

최근에 나온 함수형, 객체지향 프로그래밍 언어와는 달리 초기에 나온 절차적 프로그래밍 언어이다. 프로그래머에 따라 객체지향처럼 쓸 수도 있지만...[2]

  • 강 타입언어

C언어는 강 타입언어지만 부동소숫점 실수형과 정수형의 상호변환은 암시적으로도 가능하다.

  • 포인터를 이용한 저수준의 메모리 접근

C언어의 알파이자 오메가. C언어가 하드웨어에 가깝다고 평가받는 요소이다. 사람들이 C언어를 약 타입언어 같다고 느끼는 것도 포인터 때문인 경우가 많다.

  • 중괄호를 이용한 스코프 지정

기존의 프로그래밍 언어보다 C프로그래밍 언어를 사용한 코드가 간결해진 이유. 후대 언어에게도 영향을 미쳤다.

  • 컴파일 언어

현대(2000년도 이후)에 주류로 사용되는 프로그래밍 언어(Java, C#, Objective C, Python 등) 중 몇 안 되는 컴파일 언어이다.

장점

  • 사용자가 프로그램의 모든 부분을 관리할 수 있다.

모든 것을 사용자에게 맡긴다. 다른 프로그램이라면 컴파일 오류를 내뱉을 만한 구문이라도 C에서는 정상적으로 실행된다.

  • 익혀야 할 문법의 양이 굉장히 적다.

단점

  • 사용자가 프로그램의 모든 부분을 관리해야만 한다.

위에서 적은 장점은 곧 단점이기도 하다. 배열의 범위를 벗어나도 컴파일러는 오류를 내뱉지 않는다. 사용자가 메모리를 꼼꼼하게 관리하지 않으면 메모리 누수가 발생한다.

  • 문법은 단순하지만 언어 사용 기술은 단순하지 않다.

문법의 종류가 적다고 코딩이 쉬운 것은 아니다. 문법에서 지원하는 기능이 몇 개 없다는 건 바꿔 말하면 지원하지 않는 기능을 모두 손수 구현해서 사용한다는 뜻이 된다. 더불어 포인터와 관련되어 개발된 각종 트릭들은 C 언어를 본격적으로 사용할 때의 난이도를 대폭 상승시킨다.

버전

K & R

국제 표준이 나오기 이전의 C문법이다, C 개발자가 사용했던 문법이다.

ANSI C

국제 표준으로 등록된 문법 및 라이브러리며, 현재까지도 대다수의 C프로그래머들은 이 표준을 사용한다. C99,C11은 장식이다 소스코드 정적 분석을 하는 사람들도 대상 코드를 ANSI C로 잡는 경우가 대다수라서 앞으로도 대격변이 있지 않은 이상, 이 표준 이외의 표준이 주류가 되기는 어려울 것으로 보인다.

C99

그동안 발전이 뒤쳐져서 새로운 표준이 등록되었다. 진위형(bool)이나 인라인 함수, 변수 선언 제약의 완화등이 있으나, VC에서 지원하지 않아 잊혀졌다.

C11

C++기술위원회와 협의하여 C++11와 같이 나온 표준이다. 역시 C++11처럼 표준 스레드 라이브러리등이 추가 되었으나, 추가 되었는지도 모르는 사람이 태반이다.

주석

  1. http://health20.kr/2958
  2. 객체지향이라는 개념은 일부 프로그래밍 언어의 언어적 특징이기도 하지만, 기본적으로는 프로그래밍 패러다임의 한 종류이기 때문에 C와 같은 절차적 프로그래밍 언어로 비슷하게 구현하는 것이 불가능하지는 않다. 그러나 생산성이 매우 떨어지고 극악하게 힘든 데다, C를 이렇게 사용하면 C언어를 선택한 이유가 사라지게 되니...