From a PDP-11 at Bell Labs to the most widely deployed programming language on Earth. 52 years of evolution.
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.
void, const, volatile, and standardizes the library. Adopted by ISO as C90 (ISO/IEC 9899:1990).<wchar.h>), digraphs, and <iso646.h>. A minor but necessary update for internationalization.// 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._Atomic, _Thread_local, _Generic, anonymous structs/unions, aligned_alloc(), <threads.h>, and bounds-checking interfaces (Annex K). VLAs made optional.typeof, nullptr, constexpr, #embed, _BitInt, digit separators (1'000'000), [[attributes]], auto type inference, binary literals, and <stdbit.h>. The biggest revision since C99.| Standard | ISO Number | Year | Key Additions |
|---|---|---|---|
| K&R C | — | 1978 | Original de facto standard from the K&R book |
| C89 / C90 | ISO/IEC 9899:1990 | 1989 | Prototypes, void, const, volatile, standard library |
| C95 | AMD1 | 1995 | Wide chars, digraphs, iso646.h |
| C99 | ISO/IEC 9899:1999 | 1999 | inline, VLAs, stdint.h, stdbool.h, restrict, // comments, designated init, long long |
| C11 | ISO/IEC 9899:2011 | 2011 | Atomics, threads, _Generic, anonymous structs, aligned_alloc |
| C17 | ISO/IEC 9899:2018 | 2018 | Bugfixes only — no new features |
| C23 | ISO/IEC 9899:2024 | 2024 | typeof, nullptr, constexpr, #embed, _BitInt, attributes, auto, binary literals |
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.