Typos and updates made to version 1.1 dated January 29 2008. These
will appear in the next release of the pdf.
These are all the typos that I heard about (no margin layout issues
are listed here).
Page numbers refer to the pdf page number (i.e., pages since the
front cover).
The persons name given is the first person who reported the problem.
Let me know if you would like your email address given next to your
name (default is not to give it).
20:00 9 Jul 08
Sentence 0, Section 14.3.4, Stephen Hite
"who overestimates" -> "who overestimate"
14:00 21 May 08
Sentence 384, Other languages, Derek Jones
Added paragraph on syntactic conventions used in other language
standards.
23:00 12 May 08
Sentence 770, section 2.3, Eric J. Christeson
Changed:
There contribution to the entropy measure used...
to:
Their contribution to the entropy measure used...
13:00 7 May 08
Sentence 792
Added subsection on English loan words
23:00 20 Mar 08
Sentence 1143, Coding guidelines, Rodolfo Federico Gamarra
6.4% deriving it (e.g., 6*7 => 6*6 + 1)
changed to:
6.4% deriving it (e.g., 6*7 => 6*6 + 6)
08:00 4 Mar 08
Sentence 633, Commentary, Giacomo A. Catenazzi
Delete:
There is no requirement that prevents a structure type from being
compatible with an appropriate union type; at the time of writing
this issue is the subject of an outstanding DR (251).
14:20 10 Feb 08
Sentence 1965, Example, Harald vn Dijk
/* There are no cases where the behavior is only defined if right most ## performed first. */
changed to:
/*
* There is a single case where the behavior is only defined if right most ## performed first.
*/
#define in_between(x) mkstr(x)
#define mkstr(x) #x
char *p = in_between(GLUE_3(%:, %, :));
12:00 10 Feb 08
Sentence 92, Example, Jonathan Leffler
... the function f_1 is ...
changed to:
... the function DR_109 is ...
21:00 5 Feb 08
Sentence 792, Figure 792.15, Rodolfo Federico Gamarra
postgress -> postgresql
19:30 31 Jan 08
Sentence 822, Coding guidelines, Rodolfo Federico Gamarra
sometimes with embellishments, e.g., ℏ
changed to:
a closely related constant is ℏ, the
reduced Planck constant
12:00 30 Jan 08
Conventions sentence, Clive Taylor
Perhaps a issue -> Perhaps an issue
----- Updates to version 1.0b -----
20:00 19 Dec 07
Sentence 117, Example, Giacomo A. Catenazzi
printf("\??="); -> printf("?\?=");
20:00 3 Mar 07
Sentence 764, Ralph Siemsen,
Sentence numbering switches over to inside page
23:00 1 Oct 06
Sentence 1138, Common implementations
Added paragraph on reciprocal multiply
Sentence 1139, Common implementations
Added paragraph on reciprocal multiply
Sentence 1354, Other languages, Derek Jones
... to denote that a type is defining declared ->
... to denote that a type is being declared
21:00 30 Sep 06
Sentence 1137, Common implementations
Major update
01:45 25 Sep 06
Sentence 1164, Common implementations
Major update to second paragraph.
01:30 25 Sep 06
Sentence 939, Commentary
Added Warren reference.
19:00 2 Sep 06
Sentence 1211
Modified example and added while loop.
19:00 2 Sep 06
Sentence 1302
Other languages subsection bug fixed with new material added.
19:00 2 Sep 06
Sentence 832
Added Other languages subsection.
01:00 1 Aug 06
Sentence 1960, Commentary, Chris Lattner
All of the code fragments showing the behavior of macro expansion are
missing a final closing parenthesis.
21:00 29 May 06
Sentence 413, Commentary, second example: Arvin Schnell
char mem1[sizeof(struct S1_TAG)] -> char mem1[sizeof(struct S2_TAG)]
01:00 17 Apr 06
Sentence 1769, Coding guidelines, fourth bullet: Derek Jones
This kind of jump is rare ... -> This is the most common kind of goto ...
14:00 10 Mar 06
Table 1760.1: Derek Jones
Percentage values updated and caption specifies exactly what is being
counted.
6.8 -> 3.8
2.8 -> 0.1
2.7 -> 2.5
2.8 -> 0.1
3.6 -> 0.8
2.9 -> 0.2
4.5 -> 1.6
12:00 20 Feb 06
Sent 787: David Poirier
push deadline the back -> push back the deadline
17:00 3 Feb 06
Table 1256.1, Caption: Derek Jones
Removed ".c files." from end of caption.
01:00 21 Jan 06
Sent 347, Common implementations: Philipp Klaus Krause
MMX -> SSE
Sent 85: Derek Jones
DR #019 -> DR #017
Sent 1029: Riesch Nicolas
some_point = &a_color_point; -> some_point = (Point *)&a_color_point;
Typos and updates made to version 1.0a dated June 16 2005. These
appeared in the next release (version 1.0b dated August 4) of the pdf.
14:00 August 4 2005
--------------------
Captions of many figures and tables
the books -> this book's
C subsection headings: Jesse Perry
Keywords and header names now displayed in the 'keyword' (bold, fixed
width) font.
Incorrect terminology: Derek Jones
preprosessor token(s) -> preprocessing token(s)
page 4: Commentary para 1: Jesse Perry
Last sentence missing a period (full stop).
page 4: Other Languages para 2: Jesse Perry
Writing a compiler for a language is the only way to get to know it
in depth and while I have
$many used$used many$
other languages I can only claim to have expertise in a few of them.
page 4: Common Implementations para 1: Jesse Perry
The two perennial needs of performance and compatibility with
existing practice often result in vendors making design choices that
significantly affect how developers
$interacted$interact$
with their products.
page 5: Coding Guidelines: para 4: Jesse Perry
Industrys' -> Industry's
page 5: Coding Guidelines: numbered list item 3: Jesse Perry
peoples -> people's
page 6: Usage: para 2: Jesse Perry
books -> book's
page 7: Commentary: para 2, sent 4: Jesse Perry
review -> reviewed
page 7: Commentary: para 2: Derek Jones
... an very ... -> ... a very ...
page 7: Commentary: para 3, sent 1: Jesse Perry
use -> used
page 8: C90 DR #987: Tom Plum
committees -> committee's
page 8: C90 difference: Gregory Warnes
is any -> if any
page 9: Usage para 1: Jeffrey Haemer
books' -> book's
page 15: Heading 8.2: Jesse Perry
Code developments -> Code development's
page 18: Commentary, para 1, sent. 1: Jesse Perry
WG14s' -> WG14's
page 19: para 6, sent 2: Jesse Perry
DR's -> DRs
page 19: Effort Invested ...: para 1, sent 5: Jesse Perry
a weeks' -> a week's
page 19: Effort Invested ...: para 1, sent 6: Jesse Perry
lets' say -> let's say
page 20: para 1, sent 2: Jesse Perry
to be exact standards -> to be exact, standards
page 20: para 1, sent 3: Jesse Perry
C Standards' email -> C Standard's email
page 20: para 2, sent 3: Jesse Perry
"The most commonly seen, by the public, documents are ..." ->
"The documents most commonly seen by the public are ..."
page 22: C++, 3rd bullet: Tom Plum
But the meaning
$is$$
appears to be the same.
page 24: para 1: Jeffrey Haemer
(perhaps some Cobol and Fortran programmers may soon
$achieved$achieve$
this).
page 24: para 2: Chris Johansen
as-if -> as if
page 24: Other languages, para 3: Tom Plum
affects -> effects
page 27: subsection 4.3: Tom Plum
KAP -> Kuck
page 28: para 3: Cliff Click
For this reason optimization techniques often take many years to find
their way from published papers to commercial products,
$it$if$
at all.
page 30: Translator optimizations para 1: Casey Peel
are a some optimizations that -> are some optimizations that
page 32: last para: Tom Plum
... transistors. Which ... -> ... transistors, which ...
page 32: last para: Derek Jones
(that is -> (i.e.,
page 32: last para: Derek Jones
Various wording changes.
page 37: para 3: David Bremner
Cache behavior when a processor is executing more than
one program at the same time can be
$quiet$quite$
complex.
page 46: last para: Tom Plum
authors -> author's
page 50: subsection 8.7, para 2: Tom Plum
... purpose was to find ... -> ... purpose were to find ...
page 93: subsection 13.2.1, para 1: Tom Plum
Typesetting problem.
page 100: para 1: Tom Plum
... Z is referred to X. -> ... Z is preferred to X.
page 105: para 1: Tom Plum
owners -> owner's
... developers return -> ... developer's return
page 105: para 1: Derek Jones
... the original developer's return -> ... the owning developer's return
page 107: subsection 14.5 heading: Tom Plum
managements -> management's
developers -> developers'
page 114: para 1: Tom Plum
... in some cases.[381] Their parents interest ... ->
... in some cases,[381] their parents' interest
page 116: para 6: Tom Plum
Your author,s experience ... -> Your author's experience ...
page 117: para 3: Tom Plum
Some studies have looked at how developers differ
$i$$
(which need not be the same as measuring expertise), including their:
Page 118: subsection 16, para 1: Tom Plum
Humans are not ideal machines, an assertion
$$that$
may sound obvious.
page 119: figure 0.19: Pavel Vozenilek
Added to caption:
Which of the two squares indicated by the arrows is the brighter one?
page 122: para 4: Pavel Vozenilek
$$or$
psychiatric problems.
page 147: subsection 16.2.8.7.1, para 1: Tom Plum
This law ... -> This "law" ...
page 158: 17.1 para 1: Jonathan Leffler
Aeveral -> Several
page 158: subsection 17.2, para 3: Tom Plum
Although there is a plentiful supply
$is$of$
C source code publicly available this source is nonrepresentative in
a number of ways, including:
page 159: table 0.23, cation: Plum/Jones
... to tools ... whose measurments was ... ->
... to measurement tools ... , whose output was ...
page 164: sent 8, Common Implementations: Tom Plum
This is usually because of the use
$$of$
dynamic data structures, which means that their only fixed limit is
the amount of memory available during translation.
page 167: Martin Elwin
it's -> its
page 171: sent 16, Coding Guidelines: Tom Plum
... a programs total ... -> ... a program's total
page 183: para 1: Tom Plum
A hosts ... -> A host's ...
page 183: bullet point 2: Tom Plum
... an objects alignment ... -> ... an object's alignment ...
page 189: Commentary, para 2: Tom Plum
Although a sequence of source code may be an erroneous program
construct, a translator is only required to issue a diagnostic
message for a syntax violation
$of$or$
a constraint violation.
page 190: Common Implementations, para 1: Tom Plum
Some translators
$prove$provide$
options that allow the developer to select the extent to which a
translator will attempt to diagnose these constructs.
page 190: Common Implementations, para 2: Tom Plum
, e.g., signed integer overflow. While in other ... ->
, e.g., signed integer overflow, while in other ...
page 191: Coding Guidelines, para 2: Tom Plum
... affect on a programs output. -> ... affect on a program's output.
page 193: para 1: Tom Plum
There is something of a circularity in the C Standard's definition
$$of$
byte and character.
page 195: sent 58, Commentary, para 2: Tom Plum
There are a large number of character sets, one for almost
$ever$every$
human language in the world.
page 218: Coding Guidelines, para 4: Tom Plum
... a vendors extensions. -> ... a vendor's extensions.
page 219: last para: Tom Plum
... the implementations library ... -> ... the implementation's library ...
page 222: sent 100, Commentary: Tom Plum
However, neither
$organizations$organization$
checked the accuracy of the documented behavior.
page 222: sent 100, Coding Guidelines: Tom Plum
It is recommended that small test programs be written to verify that
an
$implementations$implementation's$
behavior is as documented.
page 229: sent 109, Coding Guidelines, para 1: Martin Elwin
it's -> its
page 236: Coding Guidelines, para 1: Tom Plum
The effect is to prevent line
$from splicing$splicing from$
occurring and invariably causes a translator diagnostic to be issued.
page 274: Coding Guidelines, para 3: Tom Plum
glob -> g
page 279: nested bullet 3: Tom Plum
Many linkers do not include function definitions that are never
$references$referenced$
in the program image.
page 279: para 1: Tom Plum
... limitations,and ... -> ... limitations, and ...
page 281: sent 190, Coding Guidelines: Tom Plum
..., are to diverse ... -> ..., are too diverse ...
page 285: Coding Guidelines: Tom Plum
The extent to which it is cost effective to use the information
provided by the status flags is outside the scope of these coding
$guideline$guidelines$
.
page 295: sent 212, Commentary, para 3: Tom Plum
... characters sets is ... -> ... character sets is ...
page 299: sent 217, Coding Guidelines: Tom Plum
... that languages explicit ... -> ... that language's explicit ...
page 305: sent 224, Common Implementations: Tom Plum
www.ecma.ch -> www.ecma-international.ch
page 311: sent 240, Commentary, para 3: Tom Plum
Most character encodings do not contain any combining characters, and
those
$they$that$
do contain them rarely specify whether they should occur before or
after the modified base character.
page 330: para 1: Tom Plum
512&;K -> 512 K
page 336: sent 280, Commentary, para 2: Tom Plum
\u12345678 -> \U12345678
page 357: page 301, Common Implementations: Tom Plum
$Suffixed$Suffixes$
are generally used, rather than hexadecimal notation, to specify
unsigned types.
page 392: last para: Tom Plum
... just effect ... -> ... just affect ...
page 419: para 3: Tom Plum
Most compiler
$book$books$
limit there discussion to LR and LL related methods.
page 433: bullet 2: Tom Plum
recursive , -> recursive,
page 429: sent 399, Commentary, para 3: Tom Plum
... at file ... -> ... "at" file ...
... in block ... -> ... "in" block ...
page 434: para 3: Tom Plum
... an identifiers scope ... -> ... an identifier's scope ...
page 459: para 1: Tom Plum
... a subjects ... -> ... a subject's ...
page 470: para 1: Tom Plum
... the processors ... -> ... the processor's ...
page 490: Martin Elwin
it's -> its
page 496: para 1: Tom Plum
loose -> lose
page 526: sent 527, C++, para 1: Tom Plum
... plain old datatype ... -> ... plain old data ...
page 730: bullet 2: Tom Plum
This encoding can vary from the relatively simply, or
$quiet$quite$
complex.
page 730: para 3: Tom Plum
.. an identifiers spelling ... -> .. an identifier's spelling ...
page 836: Coding Guidelines, para 3: Derek Jones
Paragraphs 3 & 4 should be a single sentence.
page 885: sent 907, Commentary: Derek Jones
Reworded forst sentence.
page 932: sent 957, Common Implementations
... arrays elements. -> ... array's elements.
page 1254: last para: Tom Plum
... edge affects ... -> ... edge effects ...
page 1265: sent 1500, Commentary, para 1: Tom Plum
... an optimizers ... -> ... an optimizer's ...
... points to information? -> ... points-to information?
page 1265: sent 1501, Commentary, para 1: Tom Plum
(such as limits
$$on$
how objects referenced by restricted pointers are accessed)
page 1268: sent 1509, Coding Guidelines: Tom Plum
The technical difficulties involved in proving that a developer's use
of restrict has defined behavior
$is$are$
discussed elsewhere.
page 1272: sent 1519, Commentary, para 3: Tom Plum
... functions calls ... -> ... function calls ...
... the affect ... -> ... the effect ...
page 1273: C++: Tom Plum
... a programs ... -> ... a program's ...
page 1273: Common Implementations, para 3: Tom Plum
... the affects ... -> ... the effects ...
page 1276: C++, para 3: Tom Plum
The situation is more complicated when the translated output comes
from both a C
$$and$
a C++ translator.
page 1278: sent 1529, Commentary, para 1: Tom Plum
... inline functions ... -> ... inline function ...
page 1279: sent 1532, C++, para 1: Tom Plum
In the C++ ... -> In C++ ...
page 1308: sent 1589, Coding Guidelines: Tom Plum
... developers expectations ... -> ... developer's expectations ...
page 1313: sent 1600, Other Languages: Tom Plum
... languages separate ... -> ... language's separate ...
page 1314: sent 1601, Other Languages: Tom Plum
... number of parameters, -> ... number of parameters.
page 1314: sent 1601, Coding Guidelines: Tom Plum
Two paragraphs should be single sentence.
page 1316: Coding Guidelines: Tom Plum
Reworded second sentence.
page 1317: C++, para 2: Tom Plum
... parameters types ... -> ... parameters' types ...
page 1321: Other Languages: Tom Plum
A few languages (e.g., Algol 68)
$has$have$
a concept similar to that of abstract declarator.
page 1324: para 2: Tom Plum
it is also necessary to set or reset a flag based on the current
syntactic context, because an identifier should only be looked up, to
find out if it is currently defined as a
typedef-name,
$is$in$
a subset of the contexts in which an identifier can occur.
page 1327: Commentary, para 3: Tom Plum
... the latter ... -> ... the former ...
page 1328: sent 1622, para 4: Tom Plum
... is switch ... -> ... is switched ...
page 1332: Coding Guidelines, para 3: Tom Plum
Until more is known about the frequency with which individual
initializers are read for comprehension, as opposed to being given a
$cursor$cursory$
glance it is not possible to reliably provide cost effective
recommendations about how to organize their layout.
page 1340: sent 1640, Common Implementations: Tom Plum
... zero. Many ... -> ... zero, many ...
page 1340: sent 1641, Commentary, para 1: Tom Plum
... conceptual value indeterminate ... -> ... conceptual indeterminate ...
page 1340: sent 1641, Other Languages: Tom Plum
... implicit assign ... -> ... implicitly assign ...
page 1334: sent 1651, Commentary: Tom Plum
Just like simple assignment, it is possible
$$to$
initialize a structure or union object with the value of another
object having the same type.
page 1345: sent 1654, Coding Guidelines: Tom Plum
... string literals ... -> ... string literal's ...
page 1353: sent 1666, Coding Guidelines, para 1: Tom Plum
... not&including ... -> ... not, including ...
page 1355: sent 1673, C99: Tom Plum
Delete header material involving { ... }
page 1391: Other Languages, para 7: Tom Plum
... switch, is used. -> ... switch.
page 1392: para 3: Tom Plum
Conditional instructions ... -> Conditional branch instructions ...
page 1393: last bullet: Tom Plum
(one of them
$possible$possibly$
being the null pointer constant)
page 1399: subsection 5, para 1: Tom Plum
... for peoples ... -> ... for people's ...
page 1430: DR #268 quote: Tom Plum
// Some code centre:
->
// Some code
centre:
page 1432: para 2: Tom Plum
For this reason this guideline subsection is silent on the issue of
how loops might
$termination$terminate$
.
page 1432: para 2: Tom Plum
Reworded penultimate sentence.
page 1432: sent 1757, Commentary: Tom Plum
... if statements. -> ... if statement.
page 1432: sent 1756, Commentary: Derek Jones
Reworded and changed outward reference.
page 1432: sent 1757, Commentary: Derek Jones
Reworded.
page 1435: Other Languages: Tom Plum
Most other languages do not support having anything
$$other than$
the loop control variable tested against a value that is known at
translation time.
page 1447: C++, para 1: Tom Plum
(the wording in a subsequent example suggests that being visible
rather than in scope
$is$$
more accurately reflects the intent)
page 1452: Usage, para 1: Tom Plum
Delete.
page 1465: bullet 1: Tom Plum
Delete first grammar production (FABLE).
page 1479: sent 1816, C++: Tom Plum
If no ... -> If the ...
page 1491: Common Implementations, para 1: Tom Plum
ah hoc -> ad hoc
page 1501: para 9: Tim Howe
subjects performance -> subject's performance
page 1501: para 9: Derek Jones
subject's performance, on an arithmetic problem, was ->
subject's performance on an arithmetic problem was
page 1532: sent 1915, Coding Guidelines: Tom Plum
Developer wanting to ensure that the functions definitions ... ->
Developers wanting to ensure that the function's definitions ...
page 1533: bullet 2: Derek Jones
... evaluate its arguments ... -> ... evaluate any of its arguments ...
page 1533: bullet 2: Tom Plum
... two invocations of the same macro in the same full expression is
like to ...
->
... invoking the same macro twice in the same full expression is
likely to ...
page 1547: sent 1944, Commentary: Tom Plum
... two preprocessing token is ... -> ... two preprocessing tokens is ...
page 1547: sent 1945, Coding Guidelines: Tom Plum
(
$he$the$
operators have to be adjacent to the preprocessing tokens that they
operate on)
page 1549: sent 1950, Coding Guidelines: Tom Plum
... recursion breaking ... -> ... recursion-breaking ...
page 1550: sent 1950, Coding Guidelines: Tom Plum
Without this information it is not possible
$$to$
estimate the cost/benefit of any guideline recommendations and none
are made here.
page 1561: bullet 1: Tom Plum
... change a translators ... -> ... change a translator's ...
page 1563: sent 1979, Commentary: Tom Plum
... affect a translators ... -> ... affect a translator's ...
page 1565: sent 1985, Commentary, para 1: Tom Plum
... of date changes during the ... -> ... of date during the ...
page 1569: sent 1995, C++, last para: Tom Plum
reworded second sentence to:
In the case where the value is true, the
requirements stated in C99 also occur in the C++ Standard.
page 1570: sent 2002, Commentary: Tom Plum
£s; -> £
citation 1145: Derek Jones
Updated.
----------------------------
Substantial wording changes:
page 193: C++
The C++ Standard does not explicitly state whether later versions of
standards do or do not apply. In the case of the C++ library, clause
17.3.1.4 refers to the ISO C standard,
, which could be
read to imply that agreements based on the C++ Standard may reference
either the C90 library or the C99 library. However, given that the
C++ committee work on TR 19768 (C++ Library Extensions; still in
draft form at the time of this writing&CHECKTIME;) is attempting to
include the library components that are new in C99, the obvious
interpretation is that the current C++ Standard references the C90
library.
page 196: sent 60, Commentary, para 2: Reworded:
A multibyte character is usually made up of a sequence of bytes that
can be generated by pressing keys on the commonly available
keyboards. There is not usually an obvious correspondence between
the sequence of byte values and the numeric value of a member of the
execution character set (such a correspondence does exist for a wide
character), but there is an algorithm (often specified using a finite
state machine) for converting them to this execution character set
value[.
page 729: last para: Plum/Jones
There is a commonly seen naming convention of giving a tag name and
an associated typedef name the same spelling (during the translation
of individual translation units of this book's benchmark programs 30%
of the tag names declared had the same spelling as that used in the
declaration of a typedef name). Sharing the same name has advantage
of reducing the amount of information that developers need to
remember (once they have learned this convention). As well as this C
existing practice, C++ developers often omit the keyword before a tag
name (tags are in the same name space as identifiers in C++][).
page 765: subsection 4.4.4: Added the paragraph:
A study by Okada investigated the kinds of English
spelling mistakes made by native Japanese speakers. He proposed that
the teaching and use of romaji (a method of representing spoken
Japanese syllables][ using sequences of one or more
letters from the English alphabet (only 19 to 21 of the 26 letters
available are used, e.g., c, l, and
v are not used)) was the root cause of particular
kinds of spelling mistakes, i.e., subjects were using the romaji
letter sequence/Japanese syllable sound association they were
familiar with as an aid to spelling English words. The significant
phonological][ differences between the spoken forms of
Japanese and English can result in some spellings being dramatically
incorrect. Your author does not know of any other study
investigating the English spelling performance of native speakers of
a language whose alphabet shares many letters with the English
alphabet.
]