Harbison & Steele III errata
Stephen Vinoski
vinoski at apollo.hp.com
Fri Jun 7 04:57:42 AEST 1991
[Sam Harbison asked me to post the following errata for him. -steve]
Errata: Harbison & Steele, C: A REFERENCE MANUAL, Third Edition
Sam Harbison (harbison at bert.pinecreek.com)
Wednesday, June 5, 1991
Here is a complete list of the problems discovered in
the Third Edition of Harbison & Steele's C: A REFERENCE MANUAL
(Prentice Hall, 1991). They are divided into three sections:
1. substantive problems (that make the description of C appear incorrect)
2. some comments on the grammar used (for clarification)
3. typographical problems
The substantive problems should be corrected in the third and later
printings of the book. You may wish to make a note of them in your
present copies.
I'm sorry the list is as long as it is, but I want to thank Steve
Clamage of TauMetric Corp., Roy J. Fuller of the University of
Arkansas, and George V. Reilly of Brown University for reporting
problems. I especially want to thank Steve Vinoski of HP Apollo
Division, who proofread the entire third edition and reported most of
problems listed here. Please send any additional comments on the book
to me at harbison at bert.pinecreek.com.
SUBSTANTIVE CHANGES
p. 38 In line 18, change "if (n !== m)" to "if (n != m)".
p. 69 In lines 21-24, the type specifier examples should
be formatted into two columns, like this:
void union { int a; char b; }
int enum {red, blue, green}
unsigned long int char
my_struct_type float
p. 82 In the first line in the table, change "int *x();"
to "int x();".
p. 89 Line 9 should read
char q[5] = { 'A', '\0', '\0', '\0', '\0' };
to emphasize that all elements of the array are
initialized.
p. 110 In line 14, change "p<array[N]" to "p<&array[N]".
p. 128 The statement following the union type syntax is incorrect--ANSI C
allows unions to contain bit fields, although traditional C
does not. Change the sentence to read: "The syntax for defining
components is the same as that used for structures. In traditional
C, unions must not contain bit fields, but in ANSI C this
restriction is removed."
p. 163 In line 7, change "the promotion to float" to "the
promotion to double".
p. 185 In the third paragraph, change "into its first
argument a reversed copy of its second argument" to
"into its second argument a reversed copy of its first
argument".
p. 186 In the syntax for multiplicative-expression: change
"cast-expression" to "unary-expression." Alternatively,
make the changes discussed later in this message.
p. 197 In the first line of the table at the bottom of the
page, for a=1 and b=0, change the entry under "a||b"
from 0 to 1. [(1||0)==1]
p. 226 In the insertsort example, add a declaration of
temp by changing the existing declaration to read:
register int i, j, temp;
p. 233 In line four, change "largest" to "smallest".
p. 287 The example illustrating strcpy is incorrect
because it does not return the original value of the
argument dest. The corrected example is shown below:
#include <string.h>
char *strcat(dest,src)
char *dest;
const char *src;
{
char *s = dest + strlen(dest); /* changed */
strcpy(s, src);
return dest;
}
p. 308 In line 11, change "fputs" to "fgets".
p. 327 In the prototype for ANSI vsprintf, change the
third argument from "char *arg" to "va_list arg".
p. 328 In line 4, the variable global_trace_enabled is
never used; its declaration can be removed.
p. 335 In line 1, the sentence should begin "The function
relalloc behaves like realloc except...".
p. 350 In both prototypes for system, change "command" to
"*command".
p. 372 Include the change made on p. 186 on this page
also.
COMMENTS ON THE C GRAMMAR
The cast-expression Syntax
The syntax for unary-expression and cast-expression in C:ARM (p. 179)
differs from ANSI C. Either can be used to describe C, but the ANSI
grammar is probably clearer. Here are the changes that bring C:ARM
into line with the ANSI C grammar, and the pages on which they could
be made.
multiplicative-expression: p. 186, 372
cast-expression
multiplicative-expression mult-op cast-expression
cast-expression: p. 179, 366
unary-expression
( type-name ) cast-expression
unary-expression: p. 179, 377
postfix-expression
sizeof-expression
unary-minus-expression
unary-plus-expression
logical-negation-expression
bitwise-negation-expression
address-expression
indirection-expression
preincrement-expression
predecrement-expression
unary-minus-expression: p. 181, 377
- cast-expression
unary-plus-expression: p. 181, 377
+ cast-expression
logical-negation-expression: p. 182, 372
! cast-expression
bitwise-negation-expression: p. 182, 366
~ cast-expression
address-expression: p. 183, 365
& cast-expression
indirection-expression: p. 184, 371
* cast-expression
Declaration-list Syntax
On p. 215, the syntax for declaration-list is written in a
right-associative style whereas all other similar grammatical
productions are left-associative (such as statement-list, immediately
following). To be consistent, it should be written as
declaration-list :
declaration
declaration-list declaration
TYPOGRAPHICAL PROBLEMS
(The phrase "change the font of X" means "change X from proportional
[Times] to fixed-width [Courier] font, or vice versa, as appropriate".)
p. v In the Table of Contents, section 14.2: change "Memcmp" to "memcmp".
p. 12 In the third line from the bottom, change the font of "/*".
p. 13 In the "Token Parsing" table footnote, change the fonts in
"b, -, -, x".
p. 32ff All even page numbers in chapter 3 should be in boldface.
p. 34 In line 29, add a period after "illegal".
p. 50 In line 4, change the font of "name".
p. 53 In exercise 1, definitions (c) and (d) should be in
the program typeface.
p. 82 In line 13, change the font of "ary".
p. 87 In the second line from bottom, change "element j
the array" to "element j of the array".
p. 133 The references at the end of section 5.7.4 would be
better placed at the end of section 5.7.3.
P. 161 In the example code, change the curly quotation characters `` and ''
to ". Also, the comment on the last line of the example
should line up with the previous comments.
p. 162 In footnote 1 of the table, change "if and only it"
to "if and only if it".
p. 177 In the references, change the font in "void type".
This problem appears several times in the book, but this will be
the only mention of it.
p. 178 In line 7, change "modified" to "modified".
p. 184 In the second line from the bottom, change "modified" to "modified".
p. 191 In the first line, remove the space before the
period ending the sentence.
p. 214 In line 6, change `"do;";' to `"do";'.
p. 214 The sixth line from the bottom of the page is not
aligned properly with the other examples.
p. 233 The eighth line from the bottom, smallest = a[j],
should be indented under the if statement, or included
on the same line with the if statement.
p. 241 In line 13 and 18, the example prototypes for strncpy and
fprintf differ from the prototypes that actually appear in
the ANSI C header files. See p. 287 and p. 316 for
the true prototypes.
p. 251 In line 27, change the font of "register".
p. 272 In Table 11-3, in the entry for frac_digit, change "shwon" to "shown".
p. 273 In line 13, change "Draft Proposed ANSI C" to "ANSI C".
p. 291 In line 14 of the example program, change "woords" to "words".
p. 292 In line 3, change "woords" to "words".
p. 296 In the prototype for ANSI memchr, change "size t" to "size_t".
p. 297 In line 2 of section 14.2, change "character" to "characters".
p. 300 In last line, change "file" to "files".
p. 304 In line 3 of sec. 15.4, change "program.;" to
"program;" and change "stdout" to "stdout".
p. 308 In line 12, change "put into" to "put it into".
p. 317 In line 5 of sec. 15.11.2, change "an" to "a".
p. 318 In line 2 of sec. 15.11.3, eliminate the space
before the period ending the line.
p. 320 In line 12 of sec. 15.11.6, change the font of "L".
p. 329 In line 1 of sec. 15.14, change "takes takes" to "takes".
p. 330 In line 2 of sec. 15.15, change the font of "filename".
p. 330 In line 1 of sec. 15.16, change the font of "A".
p. 344 In line 7 of sec. 18.2, change the font of "time".
p. 352 In line 3, change "steams" to "streams" (twice).
p. 358 In line 2, the sentence should begin "The function
main, which programmers must define to establish an
entry point in their C programs, is also described...".
Sam Harbison
Pine Creek Software; 305 S. Craig St., Suite 300; Pittsburgh, PA 15213
+1 412 681 9811; harbison at bert.pinecreek.com
--
| Steve Vinoski (508)256-0176 x5904 | Internet: vinoski at apollo.hp.com |
| HP Apollo Division, Chelmsford, MA 01824 | UUCP: ...!apollo!vinoski |
More information about the Comp.lang.c
mailing list