Getting Started in C

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.

Lesson 1

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.)

If you're on Windows, install Cygwin. When the selection box pops up to choose packages, expand the "Devel" category and select gcc:

Select GCC from the list of packages.

There's a video tutorial available if you want more detail, or a text tutorial if you'd rather read about it.

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.) #include int main(int argc, char** argv) { printf("Hello World\n"); return 0; } Now, get to a bash prompt. (On cygwin, this is the cygwin icon that should be on your desktop from part 1 above. On linux, this is a terminal window or whatever your system happens to call it.) Change to the directory where your files are stored. bash$ cd /tutorial On cygwin, this will put you in the c:\\cygwin\\tutorial directory. Now, compile the file. bash$ gcc hello.c GCC does not give output for a successful compile, it just produces the executable. If you do a directory listing ("ls" at the bash prompt) you will see a file called a.out (linux) or a.exe (cygwin). For historical reasons, this is what the compiler produces by default. You can run this and see the output. Type "./a.exe" or (./a.out) at the bash prompt and you should get the greeting.

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.

#include <stdio.h>

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.

printf("Hello World\n");

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.

return 0;

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.

Posted on 2009-01-09 by brian in c-programming .
Comments on this post are closed. If you have something to share, please send me email.