History of C

From a PDP-11 at Bell Labs to the most widely deployed programming language on Earth. 52 years of evolution.

Born at Bell Labs

C was born from necessity. In 1969, Ken Thompson and Dennis Ritchie at Bell Labs were building Unix on a PDP-7. Thompson first wrote Unix in assembly, then created the B language (derived from BCPL) to make it more portable. But B was too limited — it had no types, no structures, and couldn't handle the PDP-11's byte-addressable memory efficiently.

Between 1971 and 1973, Dennis Ritchie evolved B into a new language he called C. The key innovations: a type system (char, int, float, pointers, structs), a preprocessor, and the ability to compile to efficient machine code. By 1973, the Unix kernel was rewritten in C — making Unix the first operating system written in a high-level language.

This was a revolutionary idea. Operating systems were "supposed" to be written in assembly. The fact that C could produce code fast enough for an OS kernel proved that high-level languages could replace assembly for systems programming. That insight changed computing forever.

The Evolution of C
1969 – 1970
B Language
Ken Thompson creates B, a stripped-down BCPL, for the PDP-7. Used to write utilities for early Unix. Typeless — every value is a machine word.
1971 – 1973
C Is Born
Dennis Ritchie adds types, structs, and a preprocessor to B, creating C. The PDP-11 Unix kernel is rewritten in C in 1973. The language spreads through Bell Labs and universities via Unix source tapes.
1978
K&R C
"The C Programming Language" by Kernighan & Ritchie is published. It becomes the de facto standard and one of the most influential programming books ever written. "K&R C" refers to the dialect described in this book.
1983
ANSI Committee Formed
ANSI forms committee X3J11 to create a formal C standard. C has fragmented into incompatible dialects across Unix vendors, and standardization is urgently needed.
1989
ANSI C (C89)
ANSI publishes X3.159-1989, the first official C standard. Adds function prototypes, void, const, volatile, and standardizes the library. Adopted by ISO as C90 (ISO/IEC 9899:1990).
1995
Amendment 1 (C95)
ISO publishes Amendment 1 (NA1), adding wide character support (<wchar.h>), digraphs, and <iso646.h>. A minor but necessary update for internationalization.
1999
C99
ISO publishes ISO/IEC 9899:1999. The biggest update since ANSI C: // comments, inline, VLAs, <stdbool.h>, <stdint.h>, restrict, designated initializers, compound literals, long long, variadic macros, _Bool, flexible array members, and more. This is the C most people write today.
2011
C11
ISO publishes ISO/IEC 9899:2011. Adds _Atomic, _Thread_local, _Generic, anonymous structs/unions, aligned_alloc(), <threads.h>, and bounds-checking interfaces (Annex K). VLAs made optional.
2017
C17 (C18)
ISO/IEC 9899:2018. A bugfix release — no new features, only defect corrections and clarifications. Published in June 2018 despite the "C17" name.
2024
C23
ISO/IEC 9899:2024. Major update: typeof, nullptr, constexpr, #embed, _BitInt, digit separators (1'000'000), [[attributes]], auto type inference, binary literals, and <stdbit.h>. The biggest revision since C99.
All C Standards at a Glance
StandardISO NumberYearKey Additions
K&R C1978Original de facto standard from the K&R book
C89 / C90ISO/IEC 9899:19901989Prototypes, void, const, volatile, standard library
C95AMD11995Wide chars, digraphs, iso646.h
C99ISO/IEC 9899:19991999inline, VLAs, stdint.h, stdbool.h, restrict, // comments, designated init, long long
C11ISO/IEC 9899:20112011Atomics, threads, _Generic, anonymous structs, aligned_alloc
C17ISO/IEC 9899:20182018Bugfixes only — no new features
C23ISO/IEC 9899:20242024typeof, nullptr, constexpr, #embed, _BitInt, attributes, auto, binary literals
C's Family Tree

C didn't just influence computing — it defined the syntax that most programmers think in. Curly braces for blocks, semicolons for statements, if/else/while/for/switch, ++ and -- operators, /* comments */ — all from C.

Languages directly descended from or heavily influenced by C include: C++ (1979), Objective-C (1984), Java (1995), JavaScript (1995), C# (2000), PHP (1995), Perl (1987), D (2001), Go (2009), Rust (2010), Swift (2014), and Zig (2016). If you've ever written a for loop with curly braces, you're writing in C's image.

"C is quirky, flawed, and an enormous success. Although accidents of history surely helped, it evidently satisfied a need for a system implementation language efficient enough to displace assembly language, yet sufficiently abstract and fluent to describe algorithms and interactions in a wide variety of environments."
— Dennis Ritchie, "The Development of the C Language" (1993)