Getting Set Up - C++ Compilers: Advanced Compiler Details
Getting Set Up - C++ Compilers: Advanced Compiler Details
Getting Set Up - C++ Compilers: Advanced Compiler Details
This tutorial series is designed for everyone: even if you've never programmed before or if you
have extensive experience programming in other languages and want to expand into C++! It is
for everyone who wants the feeling of accomplishment from a working program.
What do I mean? C++ is a programming language--it will allow you to control your computer,
making it do what you want it to do. This programming tutorial series is all about helping you
take advantage of C++.
If you've got some prior experience, or just want a menu of choices, you should know that there
are several common compilers. If you're new to programming, just skip this section!
Some common compilers include Borland C++, Microsoft C++, and GNU C++.
There are also many front-end environments for the different compilers--the most common is
Dev-C++ around GNU's G++ compiler. Some, such as G++, are free, while others are not. Please
see the compiler listing for more information on how to get a compiler and set it up.
Each of these compilers is slightly different. Each one should support the ANSI/ISO standard C+
+ functions, but each compiler will also have nonstandard functions (these functions are similar
to slang spoken in different parts of a country). Sometimes the use of nonstandard functions will
cause problems when you attempt to compile source code (the actual C++ written by a
programmer and saved as a text file) with a different compiler. These tutorials use ANSI/ISO
standard C++ and should not suffer from this problem (with sufficiently modern compilers).
Note that if you are using an older compiler, such as TCLite, you should read check out some
compatability issues.
But how does a program actually start? Every program in C++ has one function, always named
main, that is always called when your program first executes. From main, you can also call other
functions whether they are written by us or, as mentioned earlier, provided by the compiler.
So how do you get access to those prewritten functions? To access those standard functions that
comes with the compiler, you include a header with the #include directive. What this does is
effectively take everything in the header and paste it into your program. Let's look at a working
program:
#include <iostream>
int main()
{
cout<<"HEY, you, I'm alive! Oh, and Hello World!\n";
cin.get();
}
Let's look at the elements of the program. The #include is a "preprocessor" directive that tells the
compiler to put code from the header called iostream into our program before actually creating
the executable. By including header files, you gain access to many different functions. For
example, the cout function requires iostream. Following the include is the statement, "using
namespace std;". This line tells the compiler to use a group of functions that are part of the
standard library (std). By including this line at the top of a file, you allow the program to use
functions such as cout. The semicolon is part of the syntax of C++. It tells the compiler that
you're at the end of a command. You will see later that the semicolon is used to end most
commands in C++.
The next important line is int main(). This line tells the compiler that there is a function named
main, and that the function returns an integer, hence int. The "curly braces" ({ and }) signal the
beginning and end of functions and other code blocks. You can think of them as meaning
BEGIN and END.
The next line of the program may seem strange. If you have programmed in another language,
you might expect that print would be the function used to display text. In C++, however, the cout
object is used to display text (pronounced "C out"). It uses the << symbols, known as "insertion
operators", to indicate what to output. cout<< results in a function call with the ensuing text as an
argument to the function. The quotes tell the compiler that you want to output the literal string
as-is. The '\n' sequence is actually treated as a single character that stands for a newline (we'll
talk about this later in more detail). It moves the cursor on your screen to the next line. Again,
notice the semicolon: it is added onto the end of most lines, such as function calls, in C++.
The next command is cin.get(). This is another function call: it reads in input and expects the
user to hit the return key. Many compiler environments will open a new console window, run the
program, and then close the window. This command keeps that window from closing because the
program is not done yet because it waits for you to hit enter. Including that line gives you time to
see the program run.
Upon reaching the end of main, the closing brace, our program will return the value of 0 (and
integer, hence why we told main to return an int) to the operating system. This return value is
important as it can be used to tell the OS whether our program succeeded or not. A return value
of 0 means success and is returned automatically (but only for main, other functions require you
to manually return a value), but if we wanted to return something else, such as 1, we would have
to do it with a return statement:
#include <iostream>
int main()
{
cout<<"HEY, you, I'm alive! Oh, and Hello World!\n";
cin.get();
return 1;
}
The final brace closes off the function. You should try compiling this program and running it.
You can cut and paste the code into a file, save it as a .cpp file. Our Code::Blocks tutorial
actually takes you through creating a simple program, so check it out if you're confused.
If you are not using Code::Blocks, you should read the compiler instructions for information on
how to compile.
Once you've got your first program running, why don't you try playing around with the cout
function to get used to writing C++?
When you tell the compiler a section of text is a comment, it will ignore it when running the
code, allowing you to use any text you want to describe the real code. To create a comment use
either //, which tells the compiler that the rest of the line is a comment, or /* and then */ to block
off everything between as a comment. Certain compiler environments will change the color of a
commented area, but some will not. Be certain not to accidentally comment out code (that is, to
tell the compiler part of your code is a comment) you need for the program. When you are
learning to program, it is useful to be able to comment out sections of code in order to see how
the output is affected.
User interaction and Saving Information with Variables
So far you've learned how to write a simple program to display information typed in by you, the
programmer, and how to describe your program with comments. That's great, but what about
interacting with your user? Fortunately, it is also possible for your program to accept input. The
function you use is known as cin, and is followed by the insertion operator >>.
Of course, before you try to receive input, you must have a place to store that input. In
programming, input and data are stored in variables. There are several different types of
variables which store different kinds of information (e.g. numbers versus letters); when you tell
the compiler you are declaring a variable, you must include the data type along with the name of
the variable. Several basic types include char, int, and float.
A variable of type char stores a single character, variables of type int store integers (numbers
without decimal places), and variables of type float store numbers with decimal places. Each of
these variable types - char, int, and float - is each a keyword that you use when you declare a
variable.
Sometimes it can be confusing to have multiple variable types when it seems like some variable
types are redundant (why have integer numbers when you have floats?). Using the right variable
type can be important for making your code readable and for efficiency--some variables require
more memory than others. Moreover, because of the way the numbers are actually stored in
memory, a float is "inexact", and should not be used when you need to store an "exact" integer
value.
To declare a variable you use the syntax "type <name>;". Here are some variable declaration
examples:
int x;
char letter;
float the_float;
It is permissible to declare multiple variables of the same type on the same line; each one should
be separated by a comma.
int a, b, c, d;
If you were watching closely, you might have seen that declaration of a variable is always
followed by a semicolon (note that this is the same procedure used when you call a function).
If you attempt to use a variable that you have not declared, your program will not be compiled or
run, and you will receive an error message informing you that you have made a mistake. Usually,
this is called an undeclared variable.
Case Sensitivity
Now is a good time to talk about an important concept that can easily throw you off.case
sensitivity. Basically, in C++, whether you use uppercase or lowercase letters matters. The words
Cat and cat mean different things to the compiler. In C++, all language keywords, all functions
and all variables are case sensitive. A difference in case between your variable declaration and
the use of the variable is one reason you might get an undeclared variable error.
Using Variables
Ok, so you now know how to tell the compiler about variables, but what about using them?
#include <iostream>
int main()
{
int thisisanumber;
Of course, no matter what type you use, variables are uninteresting without the ability to modify
them. Several operators used with variables include the following: *, -, +, /, =, ==, >, <. The *
multiplies, the - subtracts, and the + adds. It is of course important to realize that to modify the
value of a variable inside the program it is rather important to use the equal sign. In some
languages, the equal sign compares the value of the left and right values, but in C++ == is used
for that task. The equal sign is still extremely useful. It sets the left input to the equal sign, which
must be one, and only one, variable equal to the value on the right side of the equal sign. The
operators that perform mathematical functions should be used on the right side of an equal sign
in order to assign the result to a variable on the left side.
For example: