From human-readable code to machine-executable binary.
Handles directives like #include and #define.
Effect: Copy-pastes header files into your source. File size grows significantly.
Translates C code into Assembly Language (x86_64, ARM, etc.).
Effect: Logic is converted to CPU mnemonics (MOV, ADD, CALL).
Translates Assembly text into Machine Code (binary opcodes).
Effect: Creates an "Object File" (.o). It has code but hasn't connected to libraries yet.
Combines object files with system libraries (like stdio for printf).
Effect: Produces the final Executable. Adds Headers (PE/ELF) so the OS can run it.