1.5. Typical C++ Development
Environment
Let's consider the steps in creating
and executing a C++ application using a C++ development environment (illustrated
in Fig. 1.1). C++ systems generally consist of three parts: a program
development environment, the language and the C++ Standard Library. C++ programs
typically go through six phases: edit, preprocess,
compile, link, load and execute. The following discussion explains a typical C++ program
development environment.

Phase 1: Creating a Program
Phase 1 consists of editing a file
with an editor.
You type a C++ program using the editor, make any necessary corrections and save
the program on a secondary storage device, such as your hard drive. C++ source
code filenames often end with the .cpp, .cxx, .cc or
.C extensions (note that C is
in uppercase) which indicate that a file contains C++ source code. See the
documentation for your C++ compiler for more information on filename
extensions.
Two editors widely used on UNIX systems are
vi and emacs. C++ software packages
for Microsoft Windows such as Microsoft Visual C++ and cross-platform tools such
as Eclipse have editors integrated into the programming environment. You can
also use a simple text editor, such as Notepad in Windows, to write your C++
code.
Phases 2 and 3: Preprocessing and
Compiling a C++ Program
In phase 2, you give the command to compile
the program. In a C++ system, a preprocessor
program executes automatically before the compiler's translation phase begins
(so we call preprocessing phase 2 and compiling phase 3). The C++ preprocessor
obeys commands called preprocessor
directives, which indicate that
certain manipulations are to be performed on the program before compilation.
These manipulations usually include other text files to be compiled, and perform
various text replacements. The most common preprocessor directives are discussed
in the early chapters; a detailed discussion of preprocessor features appears in
Appendix
D, Preprocessor. In phase 3, the compiler
translates the C++ program into object code.
Phase 4: Linking
Phase 4 is called linking. C++ programs
typically contain references to functions and data defined elsewhere, such as in
the standard libraries or in the private libraries of groups of programmers working on a particular
project. The object code produced by the C++ compiler typically contains "holes"
due to these missing parts. A linker links the object code with the code for the missing
functions to produce an executable image (with no missing pieces). If the program compiles
and links correctly, an executable image is produced.
Phase 5: Loading
Before a program can be executed, it
must first be placed in memory. This is done by the loader, which takes the
executable image from disk and transfers it to memory. Additional components
from shared libraries that support the program are also loaded.
Phase 6: Execution
Finally, the computer executes the
program.
Problems That May Occur at
Execution Time
Each of the preceding phases can
fail because of various errors that we discuss throughout the book. This would
cause the C++ program to display an error message. If this occurs, you would
have to return to the edit phase, make the necessary corrections and proceed
through the remaining phases again to determine that the corrections fix the
problem(s).
Most programs in C++ input and/or
output data. Certain C++ functions take their input from cin (the standard input stream;
pronounced "see-in"), which is normally the keyboard, but cin can be redirected to another device. Data is often output
to cout (the standard output
stream; pronounced "see-out"), which is normally the computer screen, but
cout can be redirected to another device.
When we say that a program prints a result, we normally mean that the result is
displayed on a screen. Data may be output to other devices, such as disks and
hardcopy printers. There is also a standard error
stream referred to as cerr.
The cerr stream (normally connected to
the screen) is used for displaying error messages. It is common for users to
assign cout to a device other than the screen
while keeping cerr assigned to the screen, so that normal outputs are
separated from errors.
Common Programming Error 1.1
|
Errors such as
division by zero occur as a program runs, so they are called runtime errors or
execution-time errors. Fatal runtime errors cause programs to terminate
immediately without having successfully performed their jobs. Nonfatal runtime
errors allow programs to run to completion, often producing incorrect results.
[Note: On some systems,
divide-by-zero is not a fatal error. Please see your system
documentation.] |