C
In short: One of the oldest and most influential programming languages (1972) — very close to the machine, with no automatic memory management, a model for the syntax of many later languages (C++, Java, C#, JavaScript).
In more detail: In C, memory is managed manually (pointers, malloc/free) — there’s no garbage collector like in Java. This makes C extremely performant and controllable, but also error-prone (memory leaks, buffer overflows). To this day, the language of choice for operating system kernels, drivers and embedded systems.
In Depth
A simple C program shows the manual memory management that defines the language:
int *number = malloc(sizeof(int));
*number = 42;
free(number); // memory has to be explicitly released againIf you forget free(), a memory leak occurs; if you accidentally keep accessing the pointer after free(), the behaviour is undefined — exactly these classes of bugs (buffer overflows, use-after-free) have been responsible for a considerable share of all security vulnerabilities in C software for decades, which has made newer, memory-safe languages like Rust popular as an alternative for systems-level programming.
Nevertheless, C remains extremely relevant today: the Linux kernel itself is largely written in C, as are many compilers, databases and embedded systems (e.g. microcontroller firmware), where minimal resource consumption and direct hardware control are crucial. Almost every later mainstream language (C++, Java, C#, JavaScript, even Python) adopted at least parts of C’s curly-brace syntax.
Origin at Bell Labs
C was developed in 1972 by Dennis Ritchie at Bell Labs, originally to make the Unix operating system (previously written in assembly) more portable — writing an operating-system kernel in a higher-level language was unusual at the time, but caught on, because C code could be ported to new processor architectures with comparatively little effort. The 1978 book “The C Programming Language” by Ritchie and Brian Kernighan (known as “K&R”) shaped the programming style of entire generations of developers for decades and is still considered one of the most influential programming books of all time.
Pointer arithmetic as core and risk
What distinguishes C from higher-level languages is direct access to memory addresses via pointers — a variable that stores not the value itself, but the address where the value sits in memory. This allows extremely efficient data structures and direct hardware access, but also opens the door to the language’s notorious classes of bugs: a buffer overflow occurs when code writes beyond the bounds of an allocated memory region, without the language automatically preventing it — such bugs have, for decades, been the basis of countless security vulnerabilities, from the famous Morris worm in 1988 to modern exploits.
Standardisation and dialects
C isn’t a rigid, once-fixed construct, but has been officially standardised several times — ANSI C (1989, also called C89) was the first widely adopted standard, followed by C99, C11, C17 and C23, each with new language features (e.g. inline functions, better support for concurrent programming). Compilers like GCC and Clang usually support several of these standards at once and can be set to a specific one via a flag (-std=c99) — relevant because older code often deliberately builds on an older standard, to stay compatible with as many compilers as possible.
See also: C++, Rust, Garbage Collector