Notes on the C++ code for "The C++ Answer Book" by Tony L. Hansen,
Addison-Wesley, 1990, ISBN 0-302-11497-6.
............................. The Layout .............................
Each exercise is a file, e.g. "2.1" to "2.11". There are also files named
"tools", "shape" and "appendixB". Each is a shell archive, which can be
picked apart using sh or a text editor. So to get everything, you would
have to say
send 2.1 from c++/answerbook
send 2.2 from c++/answerbook
send 2.3 from c++/answerbook
...
send 8.8 from c++/answerbook
send 8.9 from c++/answerbook
send appendixB from c++/answerbook
send shape from c++/answerbook
send tools from c++/answerbook
But of course you don't need to get everything at once, just ask for the
particular exercise you're interested in at the moment. The complete list is
2.1 3.10 3.9 4.7 6.1 6.7 8.11
2.10 3.11 4.1 4.8 6.10 6.8 8.12
2.11 3.12 4.10 4.9 6.11 6.9 8.13
2.12 3.13 4.11 5.1 6.12 7.1 8.2
2.13 3.14 4.12 5.10 6.13 7.10 8.3
2.14 3.15 4.13 5.11 6.14 7.2 8.4
2.2 3.16 4.14 5.12 6.15 7.3 8.5
2.3 3.17 4.15 5.2 6.16 7.4 8.6
2.4 3.2 4.16 5.3 6.17 7.5 8.7
2.5 3.3 4.17 5.4 6.18 7.6 8.8
2.6 3.4 4.2 5.5 6.2 7.7 8.9
2.7 3.5 4.3 5.6 6.3 7.8 shape
2.8 3.6 4.4 5.7 6.4 7.9 tools
2.9 3.7 4.5 5.8 6.5 8.1 appendixB
3.1 3.8 4.6 5.9 6.6 8.10
............................ The Makefiles ...........................
The makefiles are designed for use on a UNIX machine running an AT&T C++
release. Each makefile has two major targets: the target "all" will create
one or more test programs which use the exercise text, and the target "test"
which will run a series of tests using those test programs. The tests all
consist of running a test program and comparing the output with comparison
files which you will also find present. The makefiles also assume a
directory structure where each chapter is kept in a separate directory named
"ch1" to "ch8", and each exercise is kept in a directory under ch* named
something like "3.2dir".
............................. The Code ..............................
When you look at the C files, you will occassionally note some "scaffolding"
which is not printed in the C++ Answer Book. These consist of several forms
of special C++ comments which were noted during the mechanical processing of
the code into what was printed in the book.
// EXPAND
Lines marked thus are all #include lines. The files may have been
separated to either ease the printing process or the testing process.
Whichever, the expanded files were what was printed in the book.
// DELETE
Lines marked thus are all code put into place to help either the
debugging process or the testing process. All such lines which also
refer to "debug" can be safely removed without affecting the code.
Note that these lines were also not printed in the book.
.................. Notes on the tools directory ......................
Much of the code uses a header file named for debugging purposes.
This header file may be found in "tools", along with and error.c.
introduces a single static variable "debug" which is initialized
to the value of the environment variable "DEBUG". It is then used in code
such as the following:
if (debug > 3) cerr << "Value of i=" << i << "\n"; // DEBUG
or
if (debug & 512) cerr << "Value of i=" << i << "\n"; // DEBUG
......................... Notes on ........................
All of the code was written using . For those of you with
available, most of the code runs without change. Note that the
code in chapter 8 which mucks with the internals of really does
discuss the older version of and you may have to make some
serious modifications to get it to work under . Or if you have
it, just use .
......................... Notes on ch7/shape .........................
When working in Chapter 7, you will have to build the sources in the "shape"
file before any of the exercises. The contents of the shape file should go
into a directory named ch7/shape in order for the other makefiles in chapter
7 to work. This code is a copy of the code in Chapter 7 of "The C++
Programming Language" by Bjarne Stroustrup.
....................... Notes on 1.2 vs. 2.0 Specifics ...............
All of the code was originally written for compilers based on 1987 C++ spec
(that accepted by the 1.2 AT&T release). All of the code in this book does
work on the AT&T 2.0 compiler, although some of code will generate warning
messages about using such anachronisms as calling a member function on a
const object without declare the member function as const.
Some other 2.0-based compilers are more picky about what anachronisms they
will accept. The necessary changes are minor and should not affect the code
itself.
I have found a few compilers which have problems with unsigned shorts, so
consequently the code which uses unsigned shorts extensively, such as class
arbint, may have problems if you run into those machines. Use the tests to
make certain. Also note that different releases of some compilers will have
different bugs.
Another problem with some compilers is that they do not accept the full
language. Some compilers do not accept unary operator+, for example.
Whenever I ran into a compiler bug, I usually just reported the bug to the
appropriate people and got the code to run using a different compiler.
........................... Closing Remarks ..........................
I hope that this code is of use to you. Although the code HAS been
extensively tested, there is always a possibility that I did not test some
particular case, or some code isn't as portable as it should be. If any
problems are found, I certainly wish to hear of them. I will add updates to
the archive as necessary. Also, if there are any problems with this archive
as found on research!netlib, please let me know.
Tony L. Hansen
att!pegasus!hansen, attmail!tony
hansen@pegasus.att.com