What happens when you type gcc main.c

First, gcc is the GNU Compiler Collection which is a compiler system. It is used in many different languages including C, C++, Java, Objective C and many others, C is the most popular programming language worldwide. It’s a language that was originally developed by Dennis M. Ritchie and was originally first implemented on the DEC PDP-11 computer in 1972; main.c is the file name that we want to compile that has the C extension. You must compile it in order to run it on your computer, compiling the file will convert the contents of the file into binary code so the computer can execute it. The C compilation process has four main stages: preprocessing, compilation, assembly and linking. These stages happen individually from one another, and take place in that exact order.

When you type gcc:

1. Preprocessing

Preprocessing is where gcc looks for lines in the file that have hashes and interprets them, starting with a # character are interpreted by the preprocessor as preprocessor commands.This is the first stage of compilation process where preprocessor directives (macros and header files are most common) are expanded. To perform this step gcc executes the command internally.

2. Compilation

Is translate a programming language to a machine language, and we can do that passed into the compiler and the compiler generates assembly code. The assembly code generated is particular to the instruction set of the processor inside your computer. The most common of which are ARM and x86. The ability to utilize different assemblers enables gcc to turn C source code into machine code that can work on a plurality of computer architectures. Assembly code is the least human readable form of code before it becomes machine language, which is virtually impossible to read and interpret

3. Assemble

The assembly code generated before it’s going to be converted into a object code. The assembler converts the assembly code into binary, (aka. machine code or object code). Binary is comprised entirely of 1’s and 0’s. We are going to run the gcc command with “-c” to compile it without going into the linking phase.

4. Linking

Here our object, it’s linked with other libraries that it require for be execute. The line of this depends of how many libraries with have to link. The linker links numerous object code files into a single executable file. That way, if you are working on a program with other people, you can write separate files, but in the end have one central executable file with all of your code combined. The linker also links code from any libraries we are using. There are two types of linking: dynamic and static. Static linking is done at “compile time” by the linker. Dynamic linking is done when you run a file via the operating system. Since this is the final stage that the compiler takes, we can just use the standard gcc command without any options.

Object code is only a portion of machine code (bianry) and can contain offsets and placeholders that might not be found in completed programs. Once the compilation process is over, you’re left with an executable file that will be named a.out by default.

--

--

--

Developing in Holberton School

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Quick Read for Service Discovery

Fears and problems when choosing a low-code solution

Traits to Consider in a Modern Software Development Company

How I Broke Into Tech

Object-Oriented Programming in Python

Organizations often use the terms ‘Quality Assurance’ (QA) vs ‘Quality Control’ (QC)…

Amazon Web Services — Basic Architecture

Scraping is Hard

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Gonzalo Andres Tarazona Montenegro

Gonzalo Andres Tarazona Montenegro

Developing in Holberton School

More from Medium

Behind the Scenes: in Conversation with Bo Bay Park

We’ll Have Made It When Everyone Cares Enough to Learn How to Say a Little Girl’s Name

Notes #4: Sailing through discovery & real life meet-ups & a new home📍

Learned so much from this Interview