This is not the worst book on C I have ever seen, but it is the strongest competitor for this title. The author may know how to program and may know C and even may know ANSI-C, but none of these is shown in his writing of this book.
In order to make this review short (the book does not deserve much of your time) I will concentrate on citing erroneous statements from the book. I shall leave the criticism of the coding in the book to my Web-page.
The author claims to teach ANSI-C (p. 11). Apparently, the type
signed_char(and many more such in the table on p. 38) and the
FILE* object stdprn(p. 293), to name a few, were kept secret from me.
The author seems to have missed his class when the if-statement was taught. I thought I was picking at him when I noticed that he wrote on p. 129: 'The else-statement ...', but when I saw that he claims, on p. 144, that 'Any valid if C statement can be a
conditional_expression...' I relaxed. Since the latter is false when the if-statement has a loop inside it, he may have missed the class on loops too.
The author has many misconceptions about the increment/decrement operators. For example (p.147): 'You can apply these operators only to variables.' Hmm... what about
- p. 248: 'Never pass a global variable [as a function argument, YMK] because C will get confused.'
- p. 412: 'Local variables are reserved before your program ever begins, just as global variables are.'
p. 413: 'A
voidpointer is a special kind of pointer that you must typecast.'
- p. 414: 'Remember that a pointer is no different from an array name.'
Indeed, I cannot prove that these statements are false, since it may be the case that 'most C programmers' have acquired their knowledge from this book. Moreover, bad programmers are able to make money, a lot of it - if they work for the right company. However, textbooks should aim higher, shouldn't they?
I shall conclude with the following: At the beginning of the book, in the section 'About the Author', it is written (p. xi): 'He is known for his skills at bringing advanced computer topics down to the novice's level.' I would have shortened this statement to be read: 'He is known for bringing his skills down to the novice's level.'
More examples of errors can be found on my pagehttp://www.cs.technion.ac.il/users/yechiel/CS/BadBooksC+C++.html#PerryCbyExample