C 언어의 역사

C 언어의 역사

C 언어는 오늘날 수많은 시스템 프로그래밍의 기반이 된 언어인데요. 어떻게 지금의 모습이 됐는지 시간순으로 따라가 보면, 언어가 진화해 온 흐름이 한눈에 들어와요. 초창기 C부터 표준화 과정, 그리고 최신 C23까지 큰 줄기만 짚어 볼게요.

출처: cppreference

본문

초기의 C

  • 1969: B 언어가 BCPL을 바탕으로 만들어졌어요. PDP-7 어셈블러를 대체해 Unix의 시스템 프로그래밍 언어 역할을 하게 됐죠.
    • ++, -- 연산자와 복합 할당이 추가됐지만, BCPL처럼 여전히 타입이 없는(typeless) 언어였어요.
  • 1971: B를 PDP-11로 포팅하면서 NB("new B")가 만들어졌어요.
    • int, char 같은 타입, 배열과 포인터, 배열→포인터 변환, 기계어 코드로의 컴파일이 더해졌죠.
  • 1972: 언어 이름이 C로 바뀌었어요.
    • struct, &&|| 연산자, 전처리기, 이식 가능한 입출력이 추가됐어요.
  • 1973: Unix가 C로 다시 작성됐어요.
    • unsigned, long, union, 열거형이 추가되고 타입 안전성이 높아졌어요.
  • 1978: 《The C Programming Language》 1판이 출간됐어요.

표준 C

  • 1983: ANSI가 X3J11 위원회를 설립했어요.
  • 1988: 《The C Programming Language》 2판이 출간됐어요.
  • 1989: C89 — ANSI C 표준이 출판됐어요.
    1. 기존 관행을 성문화했어요.
    2. 새 기능: volatile, enum, signed, void, 로케일
    3. C++에서 가져온 것: const, 함수 프로토타입
  • 1990: C90 — ANSI C 표준이 ISO/IEC 9899:1990으로 채택됐어요.
  • 1994: 기술 정오표 1 (ISO/IEC 9899:1990/Cor.1:1994) — 작은 변경 44건.
  • 1995: C95 (ISO/IEC 9899:1990/Amd.1:1995)
    1. 넓은 문자·멀티바이트 문자 지원이 크게 확장됐어요(<wctype.h>, <wchar.h>, 스트림 입출력 추가·변경 등).
    2. 다이그래프(digraph), <iso646.h>
  • 1996: 기술 정오표 2 (ISO/IEC 9899:1990/Cor.2:1996) — 작은 변경 24건.
  • 1999: C99 (ISO/IEC 9899:1999)
    1. 새 기능: bool, long long, <stdint.h>, <inttypes.h>, restrict, 복합 리터럴, 가변 길이 배열, 유연 배열 멤버, 지정 초기화자, <fenv.h>, 가변 매크로, 복소수, __func__, 16진수 부동소수점 형식(%a), 로케일 화폐 형식, isblank, 좁은·넓은 문자열 리터럴의 이어붙이기, 열거형의 후행 쉼표, 함수형 매크로의 빈 인자, STDC_* pragma, va_copy, tmpnam의 널 반환, setvbuf의 널 포인터, printfhh·ll 길이 지정자, snprintf, _Exit, <tgmath.h>, POSIX형 strftime 지정자.
    2. C++에서 가져온 것: inline, 선언과 코드 섞어 쓰기, for 루프 초기화 절의 선언, // 주석, 소스 코드의 범용 문자 이름.
    3. 암시적 함수와 암시적 int가 제거됐어요.
  • 이후 C11에서는 스레드 인지 메모리 모델, <stdatomic.h>, <threads.h>, 타입 제네릭 함수, alignas/alignof, noreturn, static_assert, 분석성 확장, 복소수·허수 타입 확장, 익명 구조체·공용체, 배타적 파일 열기 모드, quick_exit 등이 추가되고 gets가 제거됐어요. 또 Bounds-checking interfaces TR에서 경계 검사 인터페이스를, Unicode TR에서 char16_t, char32_t, <uchar.h>를 가져왔어요.
  • 2018: C17 (ISO/IEC 9899:2018) — IEC 60559:2011의 기본 요구 사항 전부와 일부 권고를 (주로 Annex F에) 반영하는 C11 변경판.
  • 2023 C23 (ISO/IEC 9899:2024) — 현재 개정판. 10진 부동소수점 산술, 확장 부동소수점 형식·교환 형식, π 단위 삼각법 등 IEC 60559:2011 권고를 지원하도록 C11을 확장한 변경들이 담겼어요.

더 알아보기

  • 각 표준이 실제 문법·기능에 어떤 변화를 줬는지는 각 토픽 페이지의 (C11부터) 같은 표기로 확인할 수 있어요.
  • C에서 '표현식은 모두 타입을 갖는다' 같은 기본 개념은 type 문서에서 더 깊게 볼 수 있어요.