Some may argue that C is an outdated language to learn in 2009. I disagree. Learning C requires some degree of understanding how computers really work. And if you can understand pointers, you're ten steps ahead of the game.
This is the first in a series of articles designed to help the reader learn the C language and understand how to use it to solve practical problems. The tutorial will be based on gcc in a Cygwin or Linux environment.
If you are already running Linux or have Cygwin and GCC installed, you're halfway done with the first lesson.
Part 1, Get GCC
If you're using linux, open a terminal window (bash prompt). Type "gcc --version". If you get back something like:
$ gcc --version gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Then you're all set. If you don't have gcc installed, use your
distribution's package installation tool to install it. (For example,
Debian-based systems will use
sudo apt-get install gcc.)
Part 2, "Hello World"
Now you're ready to write your first program. If you're on Windows, I strongly recommend using a decent text editor instead of Windows Notepad or WordPad. If you have no editor on your system, try Notepad++. I haven't used it much, but it seems to work well enough. If you're on Linux, you have a choice of whatever editors are installed on your system: vi, emacs, pico, etc.Now, create a directory to store your source files. On Windows, place this directory under your cygwin installation directory. I'm going to assume you're using c:\cygwin\tutorials\, so adjust accordingly if you choose a different path.
Finally, we can write a program to print the string "Hello World" to the
output when you run it. Open your text editor and *type in* the
following program. (Do not cut and paste. The act of retyping the code
presented in this tutorial will help you learn better.)
We can change the output file by telling the compiler what we want it to name the file. bash$ gcc -o hello hello.c The -o flag (think of "output") tells the compiler to produce a file called hello.exe (cygwin) or hello (linux). Try this, and run "./hello.exe". ### Part 3, Breakdown Here's a rundown of what the pieces of this program mean.
This tells the compiler to pull the text of the file stdio.h into the program. This is called a "header" file, because it is typically included at the top (head) of your program. This header file contains the standard input/output definitions and declarations, including the declaration of the function "printf" which is used below.
int main(int argc, char** argv)
This is the start of a function definition. "main" is the name of the function that the operating system will call when you run the program. Main is always declared this way: it accepts two "arguments" called argc and argv, and it returns an integer (int). We'll come back to the argc and argv in another lesson.
A left brace is used to indicate the start of a block. The line that describes the type and arguments of the function is followed by a block that contains the programming statements that actually do something useful.
This calls the printf function, which sends text to the output device (in this case, your terminal window). A function call is built by following the function name with parentheses and including arguments inside the parentheses. The printf function is passed an argument: the string "Hello World\n".
In C, strings are surrounded by quotation marks. The sequence \n means "newline". Exercise: modify the program to remove the \n, compile it, and see what happens.
This ends the function, returning control to the function that called it (in this case, back to the operating system). It gives the value 0 to the calling function. When we return 0 to the operating system, this signifies a normal exit. Returning 1 or other values generally signifies that an error occurred.
A right brace is used to mark the end of the function.
Exercise: Experiment with this. Change the string. Add another call to printf to display a different greeting.
Next lesson: the debugger.