Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
75 lines (54 sloc) 1.97 KB
\chapter{Exercise 1: Dust Off That Compiler}
Here is a simple first program you can make in C:
\begin{code}{ex1.c}
<< d['code/ex1.c|pyg|l'] >>
\end{code}
You can put this into a \file{ex1.c} then type:
\begin{Terminal}{Building ex1}
\begin{lstlisting}
$ make ex1
cc ex1.c -o ex1
\end{lstlisting}
\end{Terminal}
Your computer may use a slightly different command, but the end result should be
a file named \file{ex1} that you can run.
\section{What You Should See}
You can now run the program and see the output.
\begin{Terminal}{Running ex1}
\begin{lstlisting}
$ ./ex1
Hello world.
\end{lstlisting}
\end{Terminal}
If you don't then go back and fix it.
\section{How To Break It}
In this book I'm going to have a small section for each program on how to
break the program. I'll have you do odd things to the programs, run them
in weird ways, or change code so that you can see crashes and compiler errors.
For this program, rebuild it with all compiler warnings on:
\begin{Terminal}{Building ex1 with -Wall}
\begin{lstlisting}
$ rm ex1
$ CFLAGS="-Wall" make ex1
cc -Wall ex1.c -o ex1
ex1.c: In function 'main':
ex1.c:3: warning: implicit declaration of function 'puts'
$ ./ex1
Hello world.
$
\end{lstlisting}
\end{Terminal}
Now you are getting a warning that says the function "puts" is implicitly declared.
The C compiler is smart enough to figure out what you want, but you should be
getting rid of all compiler warnings when you can. How you do this is add the
following line to the top of \file{ex1.c} and recompile:
\begin{lstlisting}
#include <stdio.h>
\end{lstlisting}
Now do the make again like you just did and you'll see the warning go away.
\section{Extra Credit}
\begin{enumerate}
\item Open the \file{ex1} file in your text editor and change or delete random parts. Try running it and see what happens.
\item Print out 5 more lines of text or something more complex than hello world.
\item Run \verb|man 3 puts| and read about this function and many others.
\end{enumerate}
Something went wrong with that request. Please try again.