14:00 August 5 2005 -------------------- 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. 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). 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. 12:00 June 16 2005 -------------------- Various typos: Jon Jagger Character issue suggestions: Kent Karlsson