핵심 요약
- C 언어에서 int 등의 크기가 고정되지 않은 것은 설계 결함이 아니라 12·18·36·60비트 등 다양한 컴퓨터 구조가 난립하던 1970년대의 시대적 배경 때문이었습니다.
- 당시 C 언어의 목표는 특정 크기를 강제하는 대신 각 머신의 하드웨어 자원을 가장 효율적으로 매핑해 이식성을 확보하는 것이었습니다.
- 현대 표준화된 64비트 하드웨어 기준으로 과거의 결정을 비판하는 것은 무리이며, 엄격한 고정 크기는 훗날 C99의 stdint.h를 통해 보완되었습니다.
요약 현대 개발자들에게 C 언어의 정수형(int, long 등) 크기가 고정되어 있지 않고 환경마다 달라지는 점은 대표적인 ‘설계 미스’나 수많은 버그의 원흉으로 꼽히곤 합니다. 오늘날에는 32비트나 64비트 CPU, 8비트 1바이트, 2의 보수 체계가 당연한 표준처럼 자리 잡았지만, C 언어가 태동하던 1960~70년대 컴퓨터 환경은 완전히 혼돈 그 자체였습니다.
당시 컴퓨터 제조사마다 워드 크기는 제각각이었습니다. PDP-8은 12비트, PDP-7은 18비트였으며, 허니웰이나 UNIVAC, IBM 메인프레임 등에서는 36비트 머신이 널리 쓰였습니다. 심지어 24비트, 48비트, CDC 6600 같은 60비트 컴퓨터까지 존재했고, 문자(char) 역시 6비트, 7비트, 9비트 등 기종에 따라 규격이 천차만별이었습니다. 음수를 표현하는 방식도 2의 보수뿐만 아니라 1의 보수나 부호-절댓값 방식을 사용하는 등 하드웨어 구조가 극단적으로 갈렸습니다.
이런 시대에 C 언어가 지향했던 ‘이식성(Portability)’은 오늘날 자바의 ‘한 번 작성해 어디서든 실행한다’는 개념과는 근본적으로 달랐습니다. 서로 다른 하드웨어 구조 위에서 언어가 억지로 크기를 강제하지 않고, 각 머신의 고유한 네이티브 레지스터와 하드웨어 성능을 가장 효율적으로 매핑해 실행시키는 것이 목표였습니다. 만약 C 언어가 처음부터 int 크기를 32비트 등으로 고정했다면, 12비트나 18비트, 36비트 머신에서는 극심한 연산 낭비와 비효율이 발생해 여러 플랫폼으로 확산되지 못했을 것입니다.
결국 가변 정수 크기는 실수가 아니라 그 시대에 C 언어가 살아남고 시스템 프로그래밍 언어의 제왕이 되기 위한 필수적인 선택이었습니다. 현대 2020년대의 통일된 컴퓨터 환경 기준만으로 1970년대의 설계를 미스라고 비판하는 것은 시대적 맥락을 간과한 오해에 가깝습니다. C99 표준에 이르러서야 <stdint.h>를 통해 int32_t 같은 엄격한 고정 크기 타입을 공식 지원하게 된 이유도 이러한 역사적 배경에서 기인합니다.
Sponsored · 광고