### 2.1 Compiling a simple C program ¶

The classic example program for the C language is Hello World. Here is the source code for our version of the program:

    #include <stdio.h>

    int
    main (void)
    {
      printf ("Hello, world!\n");
      return 0;
    }

We will assume that the source code is stored in a file called `hello.c`. To compile the file `hello.c` with `gcc`, use the following command:

    $ gcc -Wall hello.c -o hello

This compiles the source code in `hello.c` to machine code and stores it in an executable file `hello`. The output file for the machine code is specified using the `-o` option. This option is usually given as the last argument on the command line. If it is omitted, the output is written to a default file called `a.out`.

Note that if a file with the same name as the executable file already exists in the current directory it will be overwritten.

The option `-Wall` turns on all the most commonly-used compiler warnings—it is recommended that you always use this option! There are many other warning options which will be discussed in later chapters, but `-Wall` is the most important. GCC will not produce any warnings unless they are enabled. Compiler warnings are an essential aid in detecting problems when programming in C and C++.

In this case, the compiler does not produce any warnings with the `-Wall` option, since the program is completely valid. Source code which does not produce any warnings is said to compile cleanly.

To run the program, type the path name of the executable like this:

    $ ./hello
    Hello, world!

This loads the executable file into memory and causes the CPU to begin executing the instructions contained within it. The path `./` refers to the current directory, so `./hello` loads and runs the executable file `hello` located in the current directory.