-E = Stop after the preprocessing stage. the output is form of preprocessed soruce code. -S = Stop after the stage of compilation proper. don't assemble. form of an assembler code file for each non-assembler input file specified. basically just do compilation -c = Compile or assemble the source files, but don't link. output is form of an object file for each source file. -ggdb = Produce debuggin..