Introduction
Why C?
C is one of the most important programming languages in history. Created by Dennis Ritchie at Bell Labs in 1972, it is the language behind operating systems, embedded systems, databases, compilers, and countless other foundational software.
- Close to the metal -- C gives you direct access to memory and hardware. No garbage collector, no runtime overhead.
- Portable -- C runs on virtually every platform, from microcontrollers to supercomputers.
- The lingua franca -- Most other languages (Python, Ruby, Node.js) have runtimes written in C. Understanding C means understanding how software really works.
- Simple but powerful -- C has a small core: variables, functions, pointers, structs, and arrays. These simple building blocks compose into complex systems.
The Story
Dennis Ritchie developed C at Bell Labs between 1969 and 1973, alongside the Unix operating system. C evolved from an earlier language called B (created by Ken Thompson), which itself descended from BCPL. The first edition of The C Programming Language by Brian Kernighan and Dennis Ritchie (known as K&R) was published in 1978 and became one of the most influential programming books ever written.
C was standardized by ANSI in 1989 (C89/C90) and has been updated several times since: C99, C11, C17, and C23.
The ARM64 Assembly View
This course has a unique feature: when you run your C code, you can see the ARM64 assembly it compiles to. Click the Assembly tab after running to see the actual machine instructions generated by the TCC compiler.
This gives you a window into how your high-level C code translates to low-level processor instructions -- how variables become registers, how function calls become branch instructions, and how loops become conditional jumps.
What You Will Learn
This course contains 18 lessons organized into 7 chapters:
- C Basics -- Your first C program, variables, types, arithmetic, and type casting.
- Control Flow -- Conditionals with
if/else, loops withfor/while, andswitchstatements. - Enums and Bitwise -- Enum declarations, named constants, and bitwise operators for flags and bit manipulation.
- Functions -- Declaring functions, parameters, return values, and recursion.
- Arrays and Strings -- Arrays, C-style strings, and multi-dimensional arrays.
- Pointers -- Address-of, dereference, pointer arithmetic, and arrays as pointers.
- Structs -- Defining structs, member access, and struct pointers with the arrow operator.
Each lesson explains a concept, demonstrates it with code examples, and gives you an exercise to practice. Your code is compiled to ARM64 by TCC running in your browser, then executed by our ARM64 interpreter.
Let's get started.