-
Run preprocessor to proces preprocessor statements; e.g., #include statements to get a file ex1.i
-
Run the compiler on ex1.i to get an "assembler" file ex1.s containing symbolic machine instructions, but not the code for library functions - printf and scanf.
-
Run the assembler on ex1.s to get an object file ex1.o of machine instruction where instruction names are replace by numeric codes and labels are replaced by addresses or offsets.
-
Run the linker on ex.o to combine it with the object files in the c library (such as printf.o) to get an executable file ex1.
All steps are handled by the gcc script. In spite of being a script gcc is usually referred to somewhat inaccurately as the compiler.