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.