You may have heard, that C is a compiled language. But what does that mean? Basically programming languages can be categorized into two classes. Compiled and Interpreted. An interpreted language will be interpreted at run time by another program, which will then send the necessary commands to the CPU to do, what you specified. Examples for that, are languages like Python and Perl. C on the other hand is a compiled language. That means we have a program, the compiler, which turns your code into executable binaries. These can be run directly by the CPU without any overhead.

A compiler consist of multiple stages. First comes the lexer. It turns all the meaningless characters into tokens, which have meaning to the compiler. Then these tokens get parsed, to build the syntax-tree. With the syntax-tree the compiler can start code generation. This code can then be optimized by the optimizer, if you choose so. Bare in mind, that optimized code can be harder to debug.

On top of that C has the preprocessor. It touches the code before the compiler gets it. It is used for macros, including header-files and other stuff to prepare your code for compilation.

In this course you will not see the compiler, because we want you to concentrate on learning C. But if you are done with all the lectures, you should download one of the many compilers. We are using GCC and compiling for the c99 standard. But feel free to experiment with other compilers like Clang.

A simple compile command in a command line with gcc could look like this:
`gcc -std=c99 -o <program_name> <source_code_file>.c` For further information read the GCC-Documentation.