Wednesday, 8 October 2014

Compilation and Execution Process of C Programs

The compilation and execution process of C can be divided in to multiple steps:
  • Preprocessing - Using a Preprocessor program to convert C source code in expanded source code. "#includes" and "#defines" statements will be processed and replaced actually source codes in this step.
  • Compilation - Using a Compiler program to convert C expanded source to assembly source code.
  • Assembly - Using a Assembler program to convert assembly source code to object code.
  • Linking - Using a Linker program to convert object code to executable code. Multiple units of object codes are linked to together in this step.
  • Loading - Using a Loader program to load the executable code into CPU for execution.
Here is a simple table showing input and output of each step in the compilation and execution process:
Input                  Program        Output

source code          > Preprocessor > expanded source code
expanded source code > Compiler     > assembly source code
assembly code        > Assembler    > object code
object code          > Linker       > executable code
executable code      > Loader       > execution
Here are examples of commonly used programs for different compilation and execution steps on a Linux system:
  • "cpp hello.c -o hello.i" - Preprocessor preprocessing hello.c and saving output to hello.i.
  • "cc1 hello.i -o hello.s" - Compiler compiling hello.i and saving output to hello.s.
  • "as hello.s -o hello.o" - Assembler assembling hello.s and saving output to hello.o.
  • "ld hello.o -o hello" - Linker linking hello.o and saving output to hello.
  • "load hello" - Loader loading hello and running hello.

No comments:

Post a Comment