Highly recommended (for those that it is aimed at).
There are many good things to say about this book because the author knows his subject and knows what readers need. On the other hand, there are a couple of negative aspects to the book that the publisher is wholly responsible for.
For almost two decades, the go-to book for those learning C for both those new to programming and programmers new to C was The C Programming Language, usually referred to as K&R. That book was written in times when safe programming was not at the forefront of anyone’s mind. It was also responsible for much unfair criticism of C because the author’s assumed that you would be programming in a unix-like environment and so would be familiar with such tools as Lint. Those tools are never mentioned even though they are essential for even vaguely safe programming in a multi-file context. Several early implementations of C for Microsoft Windows based systems were based solely on the contents of K&R which led to a good deal of dangerously unsafe software being written.
Time has moved on and even though C has remained remarkably stable and close to the original version as standardised by ANSI in 1989 and ISO in 1990 there have been a number of important changes and additions. As a great deal of software, including implementations of many other languages, is written in C it is imperative that developments do not (silently) invalidate earlier code.
But we are now more than three decades on from the first Standard and what was acceptable in a language then is not any more. The more recent changes and additions to C have largely been concerned with making C more applicable to today’s requirements. Given that we are never going to see a revision of K&R to bring it up-to-date both with safe programming and the most recent (C23) iteration of the C Standard we need another go-to text. I believe that this book is it.
The author is well familiar with C as he has been a member of WG14 for many years and is currently its convenor. He also has a long track record in the domain of safe programming. There are probably very few people as qualified to write a modern introductory book on C.
This updated version of his earlier Effective C is, I believe, the go-to book for those wanting to learn C, whether first timers or long time professionals. However, I must enter caveats for both groups. First timers will need to be quick learners and/or have some background in computer languages. I suspect this group would need to read the book twice and make frequent excursions onto the Internet to clarify the importance of many fundamental aspects of programming languages.
Experienced programmers will not have that kind of problem but they will need to put aside any prior knowledge they have of C or be very careful not to allow preconceptions to cloud their understanding of the text. I would like to have seen the recent changes to C called out more clearly because otherwise the experienced reader may overlook the significance of a change.
The first 8 chapters of the book take the reader through all aspects of the latest iteration of C and the author has largely managed to avoid (implicit) forward references. That is quite hard to do because experts qualified to write good introductions are often unaware of their use of aspects that have not yet been covered formally.
The final three chapters cover the pre-processor, program structure (covering such things as coupling, cohesion, data abstraction and code reuse) and finally a chapter on debugging, testing and analysis. The book concludes with a short summary of the changes and additions introduced in C23.
So far, I would wholeheartedly recommend this book and the author is to be congratulated on an excellent job (certainly as good as that which produced K&R). Be warned that the information content is dense and the reader will likely need to return to earlier chapters as they progress through the later ones. As always, a book does not replace a mentor though finding such will be hard because many current C programmers are less familiar with modern C than we would desire.
Now to my concerns. The book (like most quality books on programming) is shockingly expensive. Curiously, page count seems to have little (if any) relationship to the price: The C++ Programming Language 4th ed. at five times the size costs almost the same, as does the more recent Programming: Principles and Practice Using C++ (C++ In-depth) with more than twice the page count. That would matter less if the publisher had paid more attention to the requirements of a reader. I know (having been a production editor responsible for the layout and format of text) that code provides serious problems for printed publications but that does not excuse pieces of code that are split between a right-hand page and the following left-hand one. Split between pages is problematic for the reader but a split that requires turning back and forth is simply not acceptable in a book that carries a premium price. The author tells me that the publisher ignored his request that this should be avoided.
I know a number of authors who insist on doing all the layout themselves and use publishers (such as Addison-Wesley) who are OK with that. I suppose this is a warning to all budding authors to be careful about your choice of publisher. Of course, the choice will not always be available but I think Robert could have done better and I am certain that the publisher should have done better.
To sum up; this is a book that deserves to be read by anyone who wants to write modern C to a professional standard. And that recommendation applies to many who are currently writing C in a less safe style from a bygone era.