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 표준이 출판됐어요.
- 기존 관행을 성문화했어요.
- 새 기능:
volatile,enum,signed,void, 로케일 - 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)
- 넓은 문자·멀티바이트 문자 지원이 크게 확장됐어요(
<wctype.h>,<wchar.h>, 스트림 입출력 추가·변경 등). - 다이그래프(digraph),
<iso646.h>
- 넓은 문자·멀티바이트 문자 지원이 크게 확장됐어요(
- 1996: 기술 정오표 2 (ISO/IEC 9899:1990/Cor.2:1996) — 작은 변경 24건.
- 1999: C99 (ISO/IEC 9899:1999)
- 새 기능:
bool,long long,<stdint.h>,<inttypes.h>,restrict, 복합 리터럴, 가변 길이 배열, 유연 배열 멤버, 지정 초기화자,<fenv.h>, 가변 매크로, 복소수,__func__, 16진수 부동소수점 형식(%a), 로케일 화폐 형식,isblank, 좁은·넓은 문자열 리터럴의 이어붙이기, 열거형의 후행 쉼표, 함수형 매크로의 빈 인자,STDC_*pragma,va_copy,tmpnam의 널 반환,setvbuf의 널 포인터,printf의hh·ll길이 지정자,snprintf,_Exit,<tgmath.h>, POSIX형strftime지정자. - C++에서 가져온 것:
inline, 선언과 코드 섞어 쓰기,for루프 초기화 절의 선언,//주석, 소스 코드의 범용 문자 이름. - 암시적 함수와 암시적
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문서에서 더 깊게 볼 수 있어요.