Preprocessing is the first pass of any compilation. Compilation is the second pass. It takes the output of the pre processor,and the source code,and generates assembler source code. Assembly is the third stage of compilation which takes the assembly source code and produces an assembly listing with offsets. Linking is the final stage of compilation. It takes one or more object files or libraries as input and combines them to produce a single(usually executable) file.