Compiling a C Program
Parts of the Compile Command SyntaxCompilers provide many options and settings that you can use depending on what properties you want the compiled program to have (e.g., faster vs. easier to debug). Again, remember we use the following command to compile a program: % g++ -g -pedantic -Wall -o executable_file_name source_file_name.C The options we will use for g++ are:
A Note on the G++ (GNU) CompilerThere are many compilers for C, but we will focus on a free open source version called the Gnu C compiler. (Actually we will use the Gnu C++ compiler, but all C programs compile using this compiler). The g++ compiler is open source, meaning you can use it for free on any project you want, including "for profit" projects. Further, if you so desire, you could extend the compiler to work better, fix bugs in the compiler, port the compiler to another operating system/computer architecture, etc. G++ will compile not only C++ programs, but C programs as well! You can download G++ free of charge for your home machine. It will run under Linux or Windows. The most recent version of the compiler can be found here: Gnu Web Page Additional documentation on the compiler is available at this location as well. Compiling a C program is a multi-stage process. At an overview level, the process can be split into four separate stages: Preprocessing, compilation, assembly, and linking. In this post, I’ll walk through each of the four stages of compiling the following C program:
PreprocessingThe first stage of compilation is called preprocessing. In this stage, lines starting with a Before interpreting commands, the preprocessor does some initial processing. This includes joining continued lines (lines ending with a To print the result of the
preprocessing stage, pass the Given the “Hello, World!” example above, the preprocessor will produce the contents of the
CompilationThe second stage of compilation is confusingly enough called compilation. In this stage, the preprocessed code is translated to assembly instructions specific to the target processor architecture. These form an intermediate human readable language. The existence of this step allows for C code to contain inline assembly instructions and for different assemblers to be used. Some compilers also supports the use of an integrated assembler, in which the compilation stage generates machine code directly, avoiding the overhead of generating the intermediate assembly instructions and invoking the assembler. To save the result of the compilation stage,
pass the This will create a file named
AssemblyDuring this stage, an assembler is used to translate the assembly instructions to object code. The output consists of actual instructions to be run by the target processor. To save the result of the assembly
stage, pass the Running the above command will create a file named
LinkingThe object code generated in the assembly stage is composed of machine instructions that the processor understands but some pieces of the program are out of order or missing. To produce an executable program, the existing pieces have to be rearranged and the missing ones filled in. This process is called linking. The linker will arrange the pieces of object code so that functions in some pieces can successfully call functions in other ones. It will also add pieces containing the instructions for library functions used by the program. In the case of the “Hello, World!” program, the linker will add the object code for the The result of this stage is the final executable program. When run without options,
What is the process called compiling?The process of converting source code written in any programming language—usually a mid- or high-level language—into a machine-level language that is understandable by the computer is known as Compilation. The software used for this conversion is known as a compiler.
What happens when a program is compiled?A compiler takes the program code (source code) and converts the source code to a machine language module (called an object file). Another specialized program, called a linker, combines this object file with other previously compiled object files (in particular run-time modules) to create an executable file.
What is the preprocessor stage of compiling?Preprocessing manipulates the text of a source file, usually as a first phase of translation that is initiated by a compiler invocation. Common tasks accomplished by preprocessing are macro substitution, testing for conditional compilation directives, and file inclusion.
What is compile and execute programs?A compiler is an executable program that takes program source code (text) as input and translates it into an executable program (binary machine code) that it writes into a file as output. That executable program can then be run to process input data and generate output according to whatever we wrote our program to do.
|