Monday 17 October 2016

// // Leave a Comment

How Compiler works on C program??

Last post we seen that how to compile C program.Now we will see how the compiler working on the C programming.
As we know that compiler converting source code into machine code that we are going to execute on the hardware then we will going to get output.
But we do not know how the compiler working internally on the C program. The answer is here. First we will see the internal architecture of compiler.
There are 4 major stages when compiler compiles the C program.
These steps are


  1. Pre-processing
  2. Compilation
  3. Assembly
  4. Linking
We are going to discuss these steps are in details.

1. Pre-Processing

In this step compiler will going to do
  1. Macro substitution
  2. Comments are stripped off
  3. Expansion of the included files
In this step header files we added after pre-processor tag that is #include<stdio.h>
get expanded.
Let us see the example of it.
To see the output of pre-processing stage, we need to  run following command in terminal:
gcc -E hi.c -o bye






The output of this command will create file of name bye.
open that file then you will able to see expanded code.

you can able to see your written code at the bottom of that file.
you can easily get all intermediate file by simple command :
gcc -save-temps hi.c -o bye
 This command will generate three intermediate files.
1. hi.i  
2. hi.s 
3. hi.o
Here hi.i file is output of pre-processing step.

2. Compilation

In the next step the pre-processed file will work as input to Compilation process.
now we will submit hi.i file to compilation process.
This step will convert the code into Assembly code.
so the output of this step will be hi.s
As you are able to see the hi.s is assembly code.

3.Assembly

Now in this step the hi.s file is taken as input and it get converted into object code that is hi.o
This file is object code file which contains machine code which is we can not understand.

4.Linking

This is the final stage at which all the linking of function calls with their definitions are done.
The linker also does some extra work; it combines some extra code to our program that is required when the program starts and when the program ends. For example, there is code which is standard for setting up the running environment like passing command line arguments, passing environment variables to every program. Similarly some standard code that is required to return the return value of the program to the system.

Now we are able to see what actually happening when we are running c program.
In the next post we will discuss regarding how  operating system runs c program.




0 comments :

Post a Comment