This appendix contains the compiler information database which is used by the automatic code extraction program ExtractCode.cpp to build makefiles that will work properly with the various compilers.
The explanation for this database format is found in the de 16116u2019q scription of ExtractCode.cpp in Chapter XX. The information about files that won't compile, along with the data for commercial compilers, is removed from the published version, and only the online version at https://www.BruceEckel.com (along with the source code file at that location) will contain that data (since it will be subject to change as new compilers are added and as bugs are removed).
#: :CompileDB.txt
# Compiler information listings for Thinking in
# C++ 2nd Edition By Bruce Eckel. See copyright
# notice in Copyright.txt.
# This is used by ExtractCode.cpp to generate the
# makefiles for the book, including the command-
# line flags for each vendor's compiler and
# linker. Following that are the code listings
# from the book that will not compile for each
# compiler. The listings are, to the best of my
# knowledge, correct Standard C++ (According to
# the Final Draft International Standard). Please
# note that the tests were performed with the
# most recent compiler that I had at the time,
# and may have changed since this file was
# created.
# After ExtractCode.cpp creates the makefiles
# for each chapter subdirectory, you can say
# "make egcs", for example, and all the programs
# that will successfully compile with egcs will
# be built.
#################################################
# Compiling all files, for a (theoretical) fully-
# conformant compiler. This assumes a typical
# compiler under dos:
# Object file name extension in parentheses:
(obj)
# Executable file extension in square brackets:
[exe]
# The leading '&' is for special directives. The
# dos directive means to replace '/'
# with '\' in all directory paths:
&dos
# The following lines will be inserted directly
# into the makefile (sans the leading '@' sign)
# If your environment variables are set to
# establish these you won't need to use arguments
# on the make command line to set them:
# CPP: the name of your C++ compiler
# CPPFLAGS: Compilation flags for your compiler
# OFLAG: flag to give the final executable name
#@CPP = yourcompiler
#@CPPFLAGS =
#@OFLAG = -e
@.SUFFIXES : .obj .cpp .c
@.cpp.obj :
@ $(CPP) $(CPPFLAGS) -c $<
@.c.obj :
@ $(CPP) $(CPPFLAGS) -c $<
# Assumes all files will compile
# See later for an example of Unix configuration
#################################################
# Borland C++ Builder 4 -- With Upgrade!!!
# Target name used in makefile:
# Object file name extension in parentheses:
(obj)
# Executable file extension in square brackets:
[exe]
# The leading '&' is for special directives. The
# dos directive means to replace '/'
# with '\' in all directory paths:
&dos
# Inserted directly into the makefile (without
# the leading '@' sign):
@# Note: this requires the upgrade from
@# www.Borland.com for successful compilation!
@CPP = Bcc32
@CPPFLAGS = -w-inl -w-csu -wnak
@OFLAG = -e
@.SUFFIXES : .obj .cpp .c
@.cpp.obj :
@ $(CPP) $(CPPFLAGS) -c $<
@.c.obj :
@ $(CPP) $(CPPFLAGS) -c $<
# Doesn't support static const
# array initialization:
C10:StaticArray.cpp
# Problem with string constructors at run-time:
C17:ICompare.cpp
# Template bug:
C19:ArraySize.cpp
# Not sure:
C20:AssocInserter.cpp
# Bitset is Broken in this compiler's library:
C20:BitSet.cpp
# Standard Library problem:
C21:SearchReplace.cpp
# Function-level try blocks not implemented:
C23:FunctionTryBlock.cpp
# Uses the SGI STL extensions, so it actually
# isn't supposed to compile with this
# compiler:
C20:MapVsHashMap.cpp
C21:MemFun4.cpp
C21:Compose2.cpp
#################################################
# Visual C++ 6.0 -- With Service Pack 3!!!
# Target name used in makefile:
# Object file name extension in parentheses:
(obj)
# Executable file extension in square brackets:
[exe]
# The leading '&' is for special directives. The
# dos directive means to replace '/'
# with '\' in all directory paths:
&dos
# Inserted directly into the makefile (without
# the leading '@' sign):
@# Note: this requires the service Pack 3 from
@# www.Microsoft.com for successful compilation!
@CPP = cl
@CPPFLAGS = -GX -GR
@OFLAG = -o
@.SUFFIXES : .obj .cpp .c
@.cpp.obj :
@ $(CPP) $(CPPFLAGS) -c $<
@.c.obj :
@ $(CPP) $(CPPFLAGS) -c $<
C02:Incident.cpp
# It can't even handle multiple "for(int i =...:"
# statements in the same scope (a really old
# language feature!):
C02:Intvector.cpp
C03:Assert.cpp
C07:MemTest.cpp
C09:Cpptime.cpp
C12:Comma.cpp
C13:GlobalNew.cpp
# Common problem with namespaces and C libraries:
C17:ICompare.cpp
C18:FileClassTest.cpp
C18:Datagen.cpp
C18:Datascan.cpp
# Can't do template type induction properly:
C19:ArraySize.cpp
# Doesn't know about template-templates:
C19:TemplateTemplate.cpp
C19:applyGromit2.cpp
# Can't do template specializations:
C19:Sorted.cpp
# Can't do explicit template instantiation:
C19:ExplicitInstantiation.cpp
# Missing part of iostreams:
C20:StreamIt.cpp
# Problem with STL:
C20:BasicSequenceOperations.cpp
C20:VectorCoreDump.cpp
C20:DequeConversion.cpp
C20:Stack2.cpp
# Problem with static class initializer:
C20:BankTeller.cpp
# Missing STL functionality:
C20:VectorOfBool.cpp
# STL problem:
C20:AssocInserter.cpp
# Various problems:
C20:WildLifeMonitor.cpp
C20:MultiSet1.cpp
C20:Thesaurus.cpp
# These use the SGI STL extensions, so they
# actually aren't supposed to compile
# with this compiler:
C20:MapVsHashMap.cpp
C21:Compose2.cpp
# Namespace problem again, and other issues:
C21:FunctionObjects.cpp
C21:Binder1.cpp
C21:Binder3.cpp
C21:Binder4.cpp
C21:RandGenTest.cpp
C21:MemFun1.cpp
C21:MemFun2.cpp
C21:FindBlanks.cpp
C21:MemFun3.cpp
C21:MemFun4.cpp
C21:FillGenerateTest.cpp
C21:Counting.cpp
C21:Manipulations.cpp
C21:SearchReplace.cpp
C21:Comparison.cpp
C21:Removing.cpp
C21:SortTest.cpp
C21:SortedSearchTest.cpp
C21:MergeTest.cpp
C21:SetOperations.cpp
C21:ForEach.cpp
C21:Transform.cpp
C21:CalcInventory.cpp
C21:TransformNames.cpp
C21:SpecialList.cpp
C21:NumericTest.cpp
# Most compilers don't support this yet:
C23:FunctionTryBlock.cpp
# Lack of support for 'static const' again:
C25:Recycle2.cpp
C26:ExtractCode.cpp
C26:MemTest.cpp
# All these do not compile only becase of the
# lack of support for 'static const'. To make
# them compile, you must substitute the
# 'enum hack' shown in chapter 8:
C08:StringStack.cpp
C08:Quoter.cpp
C08:Volatile.cpp
C10:StaticArray.cpp
C11:HowMany2.cpp
C11:Autocc.cpp
C11:Pmem2.cpp
C12:Smartp.cpp
C12:Iosop.cpp
C12:Copymem.cpp
C12:Refcount.cpp
C12:RefcountTrace.cpp
C13:MallocClass.cpp
C13:Framis.cpp
C13:ArrayNew.cpp
C14:FName1.cpp
C14:FName2.cpp
C16:IStack.cpp
C16:Stemp.cpp
C16:Stemp2.cpp
C16:Stackt.cpp
C23:Cleanup.cpp
C24:Selfrtti.cpp
C24:Reinterp.cpp
#################################################
# The egcs (Experimental g++ compiler) snapshot
# under Linux, dated July 18, 1998
(o)
[]
# The unix directive controls the way some of the
# makefile lines are generated:
&unix
@CPP = g++
@OFLAG = -o
@.SUFFIXES : .o .cpp .c
@.cpp.o :
@ $(CPP) $(CPPFLAGS) -c $<
@.c.o :
@ $(CPP) $(CPPFLAGS) -c $<
# Files that won't compile
# Error in streambuf.h:
C18:Cppcheck.cpp
# Not sure:
C19:applyGromit2.cpp
# Missing the standard library 'at()':
C19:Sorted.cpp
C19:ExplicitInstantiation.cpp
# Problem with the egcs iterator header
C20:StreambufIterator.cpp
C20:RawStorageIterator.cpp
# egcs is missing istreambuf_iterator
C20:WordList2.cpp
C20:TokenizeTest.cpp
C20:TokenIteratorTest.cpp
C20:WordCount.cpp
C20:MultiSetWordCount.cpp
# egcs is missing std::iterator:
C20:Ring.cpp
# egcs is missing char_traits
C17:ICompare.cpp
# egcs vector and deque (at least) are missing
# the "at()" functions:
C20:IndexingVsAt.cpp
# There's a problem with the egcs string class:
C17:Compare2.cpp
# Broken in this compiler's library:
C20:BitSet.cpp
# These are because <sstream> isn't implemented
C18:NumberPhotos.cpp
C19:stringConvTest.cpp
C20:StringVector.cpp
C20:FEditTest.cpp
C20:StringDeque.cpp
C20:VectorOfBool.cpp
C20:WildLifeMonitor.cpp
C21:SortTest.cpp
C21:SortedSearchTest.cpp
C21:Binder4.cpp
C21:ForEach.cpp
# Problem in parsing PrintSequence.h:
C21:Counting.cpp
C21:Manipulations.cpp
C21:SearchReplace.cpp
C21:Comparison.cpp
C21:Removing.cpp
C21:CalcInventory.cpp
C21:TransformNames.cpp
C21:SpecialList.cpp
C21:NumericTest.cpp
# The end tag is required:
#///:~
|