C is a high level programming language which converts a C code to executable which can be run in the respective target OS environment.
Usually a C program code is written with an extension .c. An IDE or editor is used to add code to the programs. Once done a compiler is used to compile the program code to executable. Some IDE provide built-in compiler while others provide option to select the compiler and debugger.
Steps involved in creating and executable.
- Add code using an editor.
- Compile using a compiler to create the executable binary. Linux uses gcc and windows uses Microsoft visual studio integrated compiler cl. There are other compilers available in multiple OS environments like borland C compiler.
- Fix any coding issues and move to step 1. Otherwise go to step 4.
- Run the final executable.
- Fix and run time found issues and move to step 1. Otherwise go to step 6.
- Final program ready.
The compilation phase can be split into 4.
- Pre-processing phase.
- Compilation phase.
- Assembly phase.
- Linking phase.
Pre-processing phase includes the following sub phases. This will generate filename.s file(in linux) which does have the below steps completed.
- Removal of Comments.
- Expansion of Macros.
- Expansion of the included files.
- Conditional compilation.
Compilation phase takes the pre-processed file and convert to assembly instructions. In case of linux it will generate the GNU assembly code.
Assembly phase include converting the assembly code into object code. filename.s will be converted to filename.o in Linux. This file will contain machine level instruction.
Linking phase is the final phase where the static libraries are linked as well as symbol lookup done for the dynamic libraries which are going to be loaded as part of run time load. The linker also add the extra code to call the main function as well as handling the exit from the program.
Note:- gcc uses dynamic linking for the standard C library functions like printf.
Use -save-temps gcc option to generate the intermediate files. gcc -Wall -save-temps -o sample -L . -I . application.c -lcall_lib
yogi@192 0830]$ ls application.*
application.c application.i application.o application.s
application.c – program code.
application.i – preprocessed file.
application.s – assembly file
application.o – object file with machine instructions.
sample – Final program.