mir.pe (일반/어두운 화면)
최근 수정 시각 : 2025-01-23 02:59:40

C(프로그래밍 언어)/역사

파일:상위 문서 아이콘.svg   상위 문서: C(프로그래밍 언어)
1. 개요2. 역사
2.1. 탄생 이전
2.1.1. ALGOL 60 (1960년)2.1.2. CPL (1963년)2.1.3. BCPL (1967년)2.1.4. B (1969년)
2.2. 탄생 이후
2.2.1. C (1972년)2.2.2. K&R C (1978년)2.2.3. ' ANSI C' (1989년), ' ISO C' (1990년)2.2.4. C95 (1995년)2.2.5. C99 (1999년)2.2.6. C11 (2011년), C17 (2018년)2.2.7. C23 (2023년)

1. 개요

C의 역사를 정리한 문서

2. 역사

2.1. 탄생 이전

2.1.1. ALGOL 60 (1960년)

C언어의 뿌리는 멀리서 보면 1960년에 발표된 ALGOL 60부터 영향을 받았다고 볼 수 있다.

2.1.2. CPL (1963년)

1963년에 ALGOL 60보다 더 다양한 용도로 확장하기 위해 CPL 언어가 케임브리지 대학교의 수학 연구소와 런던 대학교의 컴퓨터 공학부에서 공동 개발됐다. 처음에는 Cambridge Programming Language의 약어였으나, 후에 Combined Programming Language 로 변경되었다.

2.1.3. BCPL (1967년)

1967년에 마틴 리차드가 CPL을 좀 더 단순화시킨 BCPL(Basic CPL)을 개발했다.

2.1.4. B (1969년)

1969년에 BCPL이 미국으로 물건너와 켄 톰슨이 'B'라는 언어를 만들었다. 보통 여기까지가 C언어의 조상격 프로그래밍 언어로 보고 있다.

알파벳 상에서 C와 B의 앞 글자인 A와는 별 관련이 없다. 얘는 오히려 R이나 MATLAB의 조상 삘.

2.2. 탄생 이후

2.2.1. C (1972년)

1972년에 같은 벨 연구소 데니스 리치가 PDP-11 컴퓨터를 제어하기 위해 B언어의 특징을 물려받은, 최종적으로 'C'라는 이름으로 언어를 만들었다. CPL의 'C'는 케임브리지 대학의 C를 뜻했다가 후에 임페리얼 칼리지 런던과 조인트 프로젝트가 된 이후에는 'Combined'를 뜻하게 되는데, 스트로우스트루프의 회고에 의하면 저건 윗분들의 생각이고, 자신들에게 있어서 'C'는 언제나 CPL의 언어 디자이너였던 크리스토퍼 스트레이치(Christopher Strachey)였다고 한다. BCPL을 거쳐 'B' 가 된 것은 '벨' 연구소의 B를 딴 것.

C언어가 나올 당시 시점에서 당시 널리 쓰이던 포트란이나 코볼, 베이식과 비교해 보자면, C언어는 언어 자체에는 아주 기초적인 기능만을 탑재하여 언어에 기본 탑재되는 명령어를 최소 한도로 줄였다는 특징이 있는데 START나 END같은 명령어도 배제하고, 대부분을 { } 같은 기호로 표현했기 때문에 코드가 매우 깔쌈하고 용량도 줄었다. C언어에서는 포트란에는 아직 남아 있던 천공 카드 시대의 흔적이 거의 사라졌다.

최초의 C언어 컴파일러는 간단히 말하면 어셈블리어로 쓰였다. B 언어를 붙잡고 여러 번 씨름하다가 나온 부산물 중 하나가 C언어 컴파일러고, C언어 역시 리치에 의해 여러 번 리파인됐다. 이 문제가 유명해진 이유는 최초의 C언어 컴파일러 중 하나가 C언어 인터프리터로 개발됐으며 그렇게 개발된 컴파일러를 개선시키기 위해서 역시 또 그 컴파일러를 사용했기 때문이다. 혹자는 이것을 " 진흙탕에 빠진 사람이 자신의 구두끈을 잡아당겨 빠져나온 격"이라고 표현하기도 한다. 이후 여러 언어들이 개발될 때 이와 같은 방식을 이용했다.[1][2]

2.2.2. K&R C (1978년)

1978년에 브라이언 커니핸과 데니스 리치는 The C Programming Language의 초판을 집필해서 출간했다. C언어 프로그래머에게 "K&R"로 유명한 책으로 한동안 이 책을 기준 사양으로 사용됐다.

2.2.3. ' ANSI C' (1989년), ' ISO C' (1990년)

1983년에 ANSI가 K&R C를 확장 겸 표준화하기 위해 짐 브로디를 주축으로 X3J11 위원회를 소집하고 1989년에 ANSI X3.159-1989라는 공식 명칭으로 C언어 표준을 제정했다. K&R C의 확장안 성격을 가지고 있으며, 이때 제정된 C언어 표준이라고 해서 C89라고도 불렀다.

1990년에 ANSI가 C언어 표준을 국제 표준화기구(ISO)에 넘기면서 내용 변화 없이 ISO/IEC 9899:1990라는 또 다른 공식 명칭으로도 채택됐다. 내용 자체는 먼저 제정된 ANSI C와 동일하기 때문에 C90이라고 부르기도 하지만 보통은 먼저 승인된 C89가 더 많이 불려진다.

The C Programming Language 2nd Ed. 는 ANSI C 에 맞게 수정되었다.

2019년에도 이 C89/90가 사실상의 표준인데, 이유는 여러 가지가 있다. 먼저 C89/90 다음 버전부터는 마이크로소프트에서 표준안을 제대로 지키는 컴파일러를 내놓지 않은 영향이 가장 크다. 또 거의 대부분의 C언어 컴파일러는 여기서 큰 차이 없는 C99를 따르기 때문이다. 사실상 표준인 C89/90은 ANSI가 직접 제정한 표준이라서 관용적으로 'ANSI C'라고도 부른다. 이 페이지에서도 ANSI C는 C89/90를 의미한다. 하지만 공식적으로 2019년 시점에서 ANSI C와 ISO C는 최신 표준인 C18을 가리키므로. 혼동을 주기 쉬운 표현이다. 왜냐하면 ANSI가 C89/90이후 C언어 표준 제정에서 손을 떼고 ISO를 받아들였고, ISO에서는 C99, C11, C18까지 계속 업데이트를 했기 때문에. 참고로 ANSI는 미국의 표준화 기구이고, ISO는 국제 표준화 기구인데 맨 처음 C언어 표준안을 발표할 때만 ANSI 이름으로 발표했었고, 그 이후엔 ANSI 위원들과 ISO 위원들이 함께 표준안을 개발하나 표준 발표는 ISO 이름으로 하고 있다. 현재는 대부분의 표준안이 ISO 이름으로 발표, 제정되며 ANSI와 같은 각국의 표준 위원회가 받아들여 사용하는 형식을 취하고 있다.

2020년 9월에 드디어 마이크로소프트의 Visual Studio 2019부터 C11/C17 을 공식 지원하게 됐다. 많이 늦은 감은 있지만 이제 Windows에서 Visual Studio를 사용할 때에도 최신 C 문법을 통해 사용할 길이 열리게 된 것이다.

2.2.4. C95 (1995년)

1995년에 기존 C90 표준의 일부 세부 사항이 수정되고 국제 문자 집합을 추가 지원하기 위해 ISO/IEC 9899/AMD1:1995라는 공식 명칭으로 C언어 표준 첫 수정안이 발표됐다.

2.2.5. C99 (1999년)

1999년에 ISO/IEC 9899:1999라는 공식 명칭으로 표준안이 발표됐고 이후 세 차례 개정됐다.

인라인 함수, 가변 길이 배열 및 가변 배열 원소, IEEE 754 부동 소수점 지원 강화, 가변 매크로 인수 등의 새로운 기능들이 추가 지원됐으며 이는 여러 C언어 컴파일러에서 이미 비표준 확장으로 구현해 놓았던 내용이다.

C90과 대부분 상호 호환이 가능하지만 형식 지정자가 없는 선언을 허용하는 않는 등의 엄격함이 더해졌는데, 대부분의 프로그래머들이 명시적으로 선언하는 습관을 기르도록 교육받았기 때문에 큰 혼란은 없었다.

2.2.6. C11 (2011년), C17 (2018년)

2007년부터 비공식으로 "C1X"라 불렸던 C언어 표준의 개정판이 논의됐다가 2011년 4월에 제출된 후 12월 8일에 최종 승인됐다.

제네릭 매크로, 익명 구조, 향상된 유니코드 지원, 원자적 조작, 멀티스레드, 경계 검사 기능 등 문법 및 라이브러리에 새로운 기능들이 대거 추가됐다.

2018년 6월에는 최신 표준인 C17이 최종 승인됐다. C17에는 새로운 기능은 없고, 이전 C11 표준의 결함에 대한 기술적인 수정 및 설명만 추가됐다. 단, 컴파일러 옵션은 여전히 -std=c11이 최신이다.

C11, C17은 2019년 현재까지는 실무에서 아직 잘 안 쓰인다. 가변 길이 배열, 가변 인자 매크로 등 오늘날 유용하게 쓰이는 대부분의 문법은 C99에서 추가됐고, 2021년에 실무 코드베이스에서 C언어를 쓴다는 것 자체가 엄청나게 오래된 컴파일러와도 호환돼야 할 요구 조건이 있을 확률이 높기 때문이다.

2.2.7. C23 (2023년)

signed 정수형에서 2의 보수 표현을 제외한 다른 표현 지원 제거,[3] 삼중자 제거, 10진 부동 소수점, memccpy(), strdup() 등 여러 POSIX 함수의 표준 편입 등의 소소한 기능들이 추가된다. 큰 변화가 생긴 버전이라고 할 순 없다. 상세 변경점 내역은 링크 참고.



[1] 앨 스티븐스(Al Stevens)의 책에 나오는 말이다. [2] 또, 동일한 이유로 운영체제 시동을 뜻하는 단어가 bootstraping을 줄여 booting이 됐다. 운영체제가 하는 일이 하드웨어 위에서 소프트웨어를 로드하여 돌릴 수 있도록 하는 것인데, 운영체제 그 자신도 소프트웨어이기 때문에 누가 운영체제를 로드할 것인가에 대한 모순이 생기기 때문. [3] 음수를 표현하는 방법은 2의 보수 외에도 1의 보수, signed magnitude 같은 방법이 예전에는 있었다. 하지만 이를 실제로 사용하는 메이저 컴파일러는 사실상 없다.

파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는
문서의 r1669
, 번 문단
에서 가져왔습니다. 이전 역사 보러 가기
파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 다른 문서에서 가져왔습니다.
[ 펼치기 · 접기 ]
문서의 r1669 ( 이전 역사)
문서의 r ( 이전 역사)