Typos and updates made to version 1.2 dated June 2? 2009. 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).
08:26 16 Feb 2020
Sentence 824, Commentary, Jan Waclawek
Changed:
phrase 7
to:
phase 7
08:26 16 Feb 2020
Sentence 1117, Common implementations, Jan Waclawek
Changed:
invalid valid
to:
invalid value
00:48 11 Jun 2017
Sentence 191, Example, Tim Wilson-Brown
Changed:
static unsigned int glob_2;
to:
static unsigned int glob_1;
09:51 8 Jul 2015
Sentence 1099, Common implementations, Christian Mrugalla
Changed:
The root cause of applying the indirection operator to an invalid
valid is often a...
to:
The root cause of applying the indirection operator to an invalid
value is often a...
09:30 10 Feb 2012
Sentence 1055, Commentary, Jon Jagger
Changed:
(struct s_r){1, 7,
&(([2]){5, 6})}; /* Constraint: provide a value for an anonymous object. */
to:
(struct s_r){1, 7,
&((int [2]){5, 6})}; /* Constraint: provide a value for an anonymous object. */
14:00 3 Sep 2011
Sentence 1509, Example, Philipp Klaus Krause
Added comment to declaration of g.
/* Implications derived from call not declaration. */
23:00 24 Nov 2010
Sentence 1908, Example, Martin Sebor
Changed:
#define mkstr(str, ver) add_quotes(str ## ver)
to:
#define expand_params(param_1, param_2) add_quotes(param_1 ## param_2)
#define mk_str(left_str, right_str) expand_params(left_str, right_str)
02:00 10 Oct 2010
Sentence 1765, C++, Luca Forlizzi
Deleted third semicolon in loop headers and the incorrect difference
example:
for (enum {E1, E2} le; /* does not change the conformance status of the program */
// ill-formed
; ;)
;
21:00 6 Oct 2010
Sentence 1354, Example, Guillaume Knispel
Changed the three instances of:
memset(&e_g_1, sizeof(e_g_1) * 2, 0xff);
to
memset(&e_g_1, 0xff, sizeof(e_g_1) * 2);
00:30 14 Jun 2010
Sentence 989, Commentary, Derek Jones
Change:
pointer differencing.
to:
pointer dereferencing.
13:00 16 Apr 2010
Sentence 1112, Example, Luca Forlizzi
loc=sizeof((int *)[++glob]); -> loc=sizeof( int (*)[++glob]);
Sentence 1584, Example, Luca Forlizzi
The code:
n=sizeof(int * (int * [++glob])[++n]);
is not valid.
Replaced by:
n=sizeof(int (* [++n])(int * [++glob]));
and added suggested example:
n=sizeof(int * (* [n++]) [glob++]);
19:00 10 Apr 2010
Sentence 1549, Commentary, Luca Forlizzi
Deleted:
", that is not part of an initializer,..."
13:00 24 Sep 2009
Sentence 233, C99, Simon Pilz
??< } should be ??> }
15:00 8 Sep 2009
Sentence 1753, Usage, Derek Jones
Added Usage subsection.
----- Updates to version 1.2 -----
02:00 18 July 2009
Sentence 1739, Table 1739.8, Derek Jones
Changed caption to:
Occurrence of various kinds of if statement controlling expressions
(as a percentage of all if statements). Where object is a reference
to a single identifier (which may be a macro name or enumeration
constant) or an expression that evaluates to an object (e.g.,
s.m, s->m->n, *p
and a[expr]), integer-constant
is an integer constant expression, and expression
does not include any controlling expression containing an equality,
relational or logical operator (these are counted under
others). Based on the visible form of the .c files.
Sentence 1739, Table 1739.10, Derek Jones
Replace table contents by:
== , 26.2 , 88.6 , >= , 3.4 , 76.6
!= , 12.2 , 79.8 , no relational/equality , 47.6 , --
< , 6.6 , 45.4 , || , 6.9 , 85.9
<= , 1.8 , 68.5 , && , 10.4 , 82.3
> , 3.4 , 80.4 , no logical operators , 84.2 , --
Change parenthesized text in caption to:
(as a percentage of all controlling expressions containing at least
one instance of the operator and as a percentage of all occurrences
of each operator in the source).
Sentence 1763, Table 1763.2, Derek Jones
Changed caption to:
Occurrence of various kinds of while statement controlling
expressions (as a percentage of all while statements). Where object
is a reference to a single identifier (which may be a macro name or
enumeration constant) or an expression that evaluates to an object
(e.g., s.m, s->m->n,
*p and a[expr]),
integer-constant is an integer constant
expression, and expression does not include any
controlling expression containing an equality, relational or logical
operator (these are counted under others). Based on
the visible form of the .c files.
----- Updates to version 1.1 -----
01:30 13 June 2009
Sentence 369, Example, Derek Jones
Replaced example by:
#include
float before_rare_case_in_float = 9.999993e-4;
float _7_dig_rare_case_in_float = 9.999994e-4;
float after_rare_case_in_float = 9.999995e-4;
int main(void)
{
printf("9.999993e-4 == %.6e\n", before_rare_case_in_float);
printf("9.999994e-4 == %.6e\n", _7_dig_rare_case_in_float);
printf("9.999995e-4 == %.6e\n", after_rare_case_in_float);
}
01:00 26 May 2009
Sentence 1739, Coding guidelines, Arthur O'Dwyer
the problem was expression. -> the problem was expressed.
counter factual -> counterfactual
Sentence 1867, Example, Arthur O'Dwyer
Changed code to:
#define X Y
#undef X /* X is not scanned for replacement */
Sentence 1866, Commentary, Arthur O'Dwyer
born -> borne
Sentence 1865, Coding guidelines, Arthur O'Dwyer
occurring, in -> occurring; in
Sentence 1864, Common implementations, Arthur O'Dwyer
\r\n now displayed in a fixed width font.
Sentence 1864, Coding guidelines, Arthur O'Dwyer
Changed last paragraph to:
without the intervening white space the first definition would be for
a function-like macro taking one parameter x. No white space appears
in the second definition, but the source would probably be easier for
human readers to process if some appeared after the object-like macro
name.
Sentence 770, Coding guidelines, Arthur O'Dwyer
instructors -> instructors'
Sentence 770, Example, Arthur O'Dwyer
Moved code to sentence 775.
Sentence 1727, Coding guidelines, Arthur O'Dwyer
Change wording to:
FALLTHROUGH on the line before the statement that is fallen into
(some compilers and static analysis tools recognize this usage,
sometimes with no leading or trailing whitespace, and don't issue a
diagnostic for the fall through that it comments).
Plus another instance of:
FALL THROUGH -> FALLTHROUGH
Sentence 1726, Commentary, Arthur O'Dwyer
That is it is -> That is, it is
Sentence 1712, Usage, Arthur O'Dwyer
Moved figure to sentence 940 and added list of unary and arithmetic
operators to the caption.
Sentence 1587, Commentary, Arthur O'Dwyer
"reached on step 1, it the" -> "reached on step 1, the"
Sentence 1586, Common implementations, Arthur O'Dwyer
Changed first two sentences to:
In practice the unexpected (undefined) behavior may not occur until
after the usage context where the type incompatibility could be said
to occur.
Changed example to:
static int glob = 9;
void f(char p_arr[static 4][6])
{
/*
* The following will access location p_arr+(2*6+3). Had the parameter
* array sizes agreed with the argument array sizes location p_arr+(2*9+3)
* would have been accessed.
*/
p_arr[2][3] = 37;
}
void g(void)
{
char arr[4][glob];
f(arr);
}
12:00 11 May 2009
Sentence 1109, Example, Jon Jagger
Change:
* after being complemented 0000000000000010 is the result
to:
* after being complemented 0000000000000001 is the result
01:00 5 May 2009
Sentence 218, Commentary, Jon Jagger
Replaced last two sentences of first paragraph by:
This is one route through which characters appearing in the source
code can appear in the output produced by a program, another is the
&uu;func&uu;[ reserved identifier
which provides a mechanism for the name of a function to appear in a
string.
12:00 26 April 2009
Sentence 0, Section 16.2.8.3, Pascal Cuoq
Loosing -> Losing
23:00 25 March 2009
Sentence 1629, Commentary, Arthur O'Dwyer
Changed and shortened paragraph to:
it is not possible to decide using syntax only (i.e., without the use
of semantic information from a symbol table) whether type_ident(D_1);
is a function call or a declaration of D_1 using redundant
parentheses.
Sentence 1631, Other languages, Arthur O'Dwyer
"of different" -> "of a different"
Sentence 1633, Coding guidelines, Arthur O'Dwyer
authors -> author's
"to generate a diagnostic to be generated." ->
"to cause a diagnostic to be generated."
Sentence 1640, Coding guidelines, Arthur O'Dwyer
"type based" -> "type-based"
Sentence 1649, Commentary, Arthur O'Dwyer
programs -> program's
Sentence 1652, Example, Arthur O'Dwyer
previous -> previously
Sentence 1660, Commentary, Arthur O'Dwyer
"permit object" -> "permit an object"
16:00 24 February 2009
Sentence 293, Commentary, Arthur O'Dwyer
Changed:
Longer strings, than this limit, can be created by
to:
Strings longer than this limit can be created by
Sentence 1732, Coding guidelines, Arthur O'Dwyer
authors -> author's
functions -> function's
Sentence 1733, Commentary, Arthur O'Dwyer
syntactic operation -> syntactic purpose
Sentence 1733, Example, Arthur O'Dwyer
Removed three instances of semicolon after closing round bracket.
Sentence 1734, Other languages, Arthur O'Dwyer
Changed:
returns a value, while the latter never returns a value and is
to:
return a value, while the latter never return a value and is
20:00 23 February 2009
Sentence 354, Coding guidelines, Arthur O'Dwyer
Fixed incorrect comma usage.
Sentence 823, C++, Arthur O'Dwyer
Added missing comma in list of references.
Sentence 825, Common implementations, Arthur O'Dwyer
Changed:
Some implementations specify that the prefix 0b
to:
Some implementations specify that the prefix 0b
Sentence 841, Commentary, Arthur O'Dwyer
integer-suffixe -> integer-suffix
Sentence 1711, Commentary, Arthur O'Dwyer
non VLA -> non-VLA
Sentence 1711, Example, Arthur O'Dwyer
Changed:
*ploc_a = (struct T){ 1 }, *ploc_b = (struct T){ glob };
to:
*ploc_a = &(struct T){ 1 }, *ploc_b = &(struct T){ glob };
11:00 19 Jan 2009
Sentence 1324, Coding guidelines, Jon Jagger
affect to the -> affect the
Sentence 1348, Coding guidelines, Jon Jagger
Change:
The number of declarations a block scope tend to be small.
to:
The number of declarations in a block scope tends to be small.
Sentence 1352, Coding guidelines, Jon Jagger
Change:
Experience shows that using the same object is more than one role
to:
Experience shows that using the same object in more than one role
Change
(e.g., developers be aware of and remember
to:
(e.g., developers need to be aware of and remember
Sentence 1369, Common implementation, Jon Jagger
Change:
(the same could be said about registers in other processors, except
that rarely share an address with the rest of storage).
to:
(the same could be said about registers in other processors, except
that they rarely share an address with the rest of storage).
Sentence 1381, Other languages, Jon Jagger
Change:
Even though they may contain of more than one token
to:
Even though they may contain more than one token
Sentence 1401, Coding guidelines, Jon Jagger
Changed paragraph to:
This construct did not occur in the source code used for this book's
code measurements and in practice occurrences are likely to be very
rare (until version 3.3.1 gcc reported ]internal
compiler error
for many uses of objects declared to have such
a type) and a guideline recommendation is not considered worthwhile.
Sentence 1422, Common implementation, Jon Jagger
approximate 25% -> approximately 25%
Sentence 1424, Coding guidelines, Jon Jagger
Changed:
They may also accessed implicitly during assignment of structure
objects.
to:
They may also be accessed implicitly during assignment of structure
objects.
Sentence 1443, Comentary, Jon Jagger
Deleted last sentence of first paragraph.
Sentence 1443, Comentary, Derek Jones
Changed:
This choice is motivated by common usage and implementation details.
to:
This choice is motivated by common usage and the fact that arrays are
zero based.
Sentence 1452, Other languages, Jon Jagger
Changed:
an enumeration constant in different enumerated type in the same
scope.
to:
an enumeration constant in a different enumerated type in the same
scope.
Sentence 1511, Example, Jon Jagger
Delete third bullet point.
Sentence 1511, Example, Jon Jagger
Changed:
During an execution of f
to:
During an execution of WG14_N866_E
Changed:
affect the suggest it provides to a translator.
to:
affect the suggestion it provides to a translator.
Sentence 1550, Commentary, Jon Jagger
Changed:
its may cause side effects.
to:
it may cause side effects.
Sentence 1550, C++, Jon Jagger
Changed:
The C++ Standard does not specify that the end of ant declarator
to:
The C++ Standard does not specify that the end of a declarator
Sentence 1583, Commentary, Jon Jagger
Changed:
In the following the change in the value of glob does not array the
value of sizeof(arr).
to:
In the following the change in the value of glob does not affect the
value of sizeof(arr).
Sentence 1624, Commentary, Jon Jagger
Deleted material dealing with syntax available in direct-declarators
but not abstract-declarators. DR #289 changed this situation.
Sentence 1624, C90, Jon Jagger
opt should be subscript not superscript.
Sentence 1628, Commentary, Jon Jagger
Changed:
void f(int (x), /* Function returning int having a single int parameter. */
to:
void f(int (x), /* Function returning int having a single char parameter. */
Sentence 1630, Commentary, Jon Jagger
Changed:
given tor such declarations at file scope.
to:
given for such declarations at file scope.
Sentence 1641, Commentary, Jon Jagger
Changed:
visual presentation had replicated the effect.
to:
visual presentation have replicated the effect.
Sentence 1657, Commentary, Jon Jagger
Changed:
fit in with the general English
to:
fits in with the general English
14:00 11 January 2009
Sentence 1541, Commentary, Jon Jagger
Changed:
However, if a function is used within an expression an external
definition for it must exist somewhere in the entire program.
to:
If a function is used within an expression either a definition with
internal linkage must be visible or an external definition for it
must exist somewhere in the entire program.
20:00 25 Dec 08
Sentence 967, Commentary, Jon Jagger
Changed:
for instance, matrix multiple
to:
for instance, matrix multiply
Sentence 1038, Common implementations, Jon Jagger
Changed:
contains have access types that are part of a common initial sequence.
to:
contains access types that are part of a common initial sequence.
Sentence 1032, Commentary, Jon Jagger
Changed:
that is an not lvalue[ has been reduced to one in C99.
to:
that is an lvalue][ has been reduced to one in C99.
Sentence 1046, Coding guidelines, Jon Jagger
Changed:
operators, an expression statement context.
to:
operators, in an expression statement context.
Sentence 1058, Example, Jon Jagger
Changed example to:
void f(void)
{
struct s_r *p_s_r;
do {
glob(p_s_r = &((struct s_r){1});
/*
* Instead of writing the above we could have written:
* struct s_r unnamed_s_r = {1};
* glob (p_s_r = &unnamed_s_r);
* which assigns 1 to the member on every iteration, as
* part of the process of defining the object.
*/
p_s_r->mem++; /* Increment value held by unnamed object. */
} while (p_s_r->mem != 10)
}
Sentence 1119, deviation 569.1, Jon Jagger
Changed:
are divide and multiple.
to:
are divide and multiply.
Sentence 1136, Common implementations, Jon Jagger
Changed:
machine code may depend on what operation performed on the result of
to:
machine code may depend on what operation is performed on the result of
Sentence 1143, Coding guidelines, Jon Jagger
Changed:
and 3.8% repeated addition (e.g., 2 * 4 -> 2+2).
to:
and 3.8% repeated addition (e.g., 2 * 4 -> 4+4).
Sentence 1148, Coding guidelines, Jon Jagger
Change:
divide-to-multiple
to:
divide-to-multiply
Sentence 1255, Coding guidelines, Jon Jagger
Changed:
Case 2 and 3 shows that B affects the outcome;
to:
Case 3 shows that B affects the outcome;
Sentence 1255, Coding guidelines, Jon Jagger
Added: (DC decision coverage)
13:00 22 Dec 08
Sentence 729, Commentary, Jon Jagger
Changed:
* since the expression WG14_N813(a).a is not an lvalue (in C90 the
to:
* since the expression WG14_N813().a is not an lvalue (in C90 the
Sentence 759, Commentary, Jon Jagger
Changed:
guaranteed that converting a pointer value pointer to
to:
guaranteed that converting a pointer value to pointer to
Sentence 792, Coding guidelines (Label naming conventions), Jon Jagger
Changed:
a label) in the spelling. Whether it there is a worthwhile
to:
a label) in the spelling. Whether there is a worthwhile
Sentence 792, Coding guidelines (3.3 Words), Jon Jagger
Changed:
written with the components separated by + rather being immediately
to:
written with the components separated by + rather than being immediately
Sentence 815, Commentary, Jon Jagger
Changed second sentence to:
That is, a universal-character-name aware editor displays the ISO
10646 glyph representing the numeric value specified by the hex-quad
sequence value.
Sentence 822, Coding guidelines, Jon Jagger
Changed:
change value-added tax from 15%; it is now 17.5%.)
to:
change value-added tax from 15%; a few years later it changed to 17.5%.)
Sentence 835, Coding guidelines, Jon Jagger
Change:
as if its lexical included a suffix
to:
as if its lexical form included a suffix
Sentence 866, Common implementations, Jon Jagger
Changed:
structure of the characters constant until a
to:
structure of the token's character sequence until a
Sentence 888, Commentary, Jon Jagger
wide char -> wide character
Sentence 895, Common implementations, Jon Jagger
Changed:
constants are likely to be translated without diagnostic being
to:
constants are likely to be translated without a diagnostic being
Sentence 937, Coding guidelines, Jon Jagger
Changed:
The physical line containing the // from of comment
to:
The physical line containing the // form of comment
Sentence 940, Common implementations, Jon Jagger
Change:
(i.e., convert divide to multiple)
to:
(i.e., convert divide to multiply)
Sentence 940, Coding guidelines, Jon Jagger
Change:
How to readers represent expressions in memory?
to:
How do readers represent expressions in memory?
Sentence 940, Coding guidelines, Jon Jagger
Changed:
can be comprehended on an individually basis.
to:
can be comprehended on an individual basis.
Sentence 960, Example, Jon Jagger
Changed definition of f to:
void f(int *p_1, float *p_2)
{
glob = 1;
*p_1 = 3; /* May store value into object glob. */
g(glob); /* Cannot replace the argument, glob, with 1. */
glob = 2;
*p_2 = f_glob * 8.6; /* Undefined behavior if store modifies glob. */
g(glob); /* Translator can replace the argument, glob, with 2. */
}
13:00 22 Dec 08
Sentence 729, Commentary, Derek Jones
Deleted fourth paragraph.
14:00 10 Dec 08
Sentence 539, C++, Jon Jagger
Removed redundant declaration "struct st;"
Sentence 540, Common implementations, Jon Jagger
Changed:
Access to different kinds of storage is faster/slower, or
to:
For instance, access to different kinds of storage may be faster/slower, or
Sentence 565, Coding guidelines, Jon Jagger
Changed:
Qualified and qualified version
to:
Qualified and unqualified version
Sentence 570, C++, Jon Jagger
Changed:
intended as a reference to the simple, C model, or laying out
to:
intended as a reference to the simple, C model, of laying out
Sentence 588, Commentary, Jon Jagger
Change:
single instruction, followed by instructions to scrap off the
to:
single instruction, followed by instructions to scrape off the
Sentence 630, Coding guidelines, Jon Jagger
Changed:
perform these checks, e.g., having a single, textually, point of
to:
perform these checks, e.g., having a single, textual, point of
Sentence 634, C90, Jon Jagger
x.c -> xfile.c
y.c -> yfile.c
Sentence 646, C++, Jon Jagger
Changed:
f(); // Refers to a function returning int and having no parameters
to:
f(); // Refers to a function returning void and having no parameters
Sentence 653, Coding guidelines, Jon Jagger
Change:
subject of any implicit conversions, and that the result type will
to:
subject of any implicitly conversions, and that the result type will
12:00 4 Dec 08
Sentence 0, Coding guidelines, Steve Bragg
Section 8.2, second paragraph there -> their
01:30 14 Nov 08
Sentence 792, Derek Jones
Added "not" to (in section 3.6):
Non-native speaker's ability to extract information from identifiers
created by native speakers may currently be the primary
giving:
Non-native speaker's ability to extract information from identifiers
created by native speakers is not currently be the primary
17:00 13 Nov 08
Sentence 2003, Coding guidelines, Kein-Hong Man
"from am" -> "from an"
23:00 30 Oct 08
Sentence 729, Commentary, Luca Forlizzi
"array index" -> "indexed array"
23:00 30 Oct 08
Sentence 1043, C90, Luca Forlizzi
Changed wording in subsection to:
In C90 the second fragment was considered to be strictly conforming
because it did not require a union type to be visible ][ at the point where a common initial sequence
member is inspected.
14:00 17 Oct 08
Sentence 436, Giacomo A. Catenazzi
Comment in following source line incorrect:
int glob_2; /* Linkage is specified by the prior declaration. */
Line changed to:
extern int glob_2; /* Linkage is specified by the prior declaration. */
Also added following examples:
static int glob_3(); /* internal linkage. */
int glob_3(); /* Linkage is specified by the prior declaration. */
static int glob_4; /* internal linkage. */
int glob_4; /* external and internal linkage */
14:00 17 Oct 08
Sentence 397, Figure 397.1, Giacomo A. Catenazzi
Objects with internal linkage at block scope are supported.
23:00 18 Aug 08
Sentence 729, C90, Luca Forlizzi
Delete 'diff' material (the behavior of the example code is the same
for C90 and C99) starting "In the following ..." and ending with }.
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 van 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
Substantial wording changes:
Sentence 370
Common implementation on using two doubles to represent a long double.
Sentence 968
Added Example
----- 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.
]