This book is best for someone who is already a seasoned programmer who wants to attain a deeper level of understanding of how a C compiler interprets language syntax to organize memory and assign values therein. The goal this book sets out for itself is very worthwhile, and I really wanted to absorb the information it offers. However, doing so was difficult for me because, in my opinion, the writing simply lacks clarity. In just about every paragraph, there was at least one sentence whose meaning to me was utterly opaque at first. I could only attain comprehension by re-reading the sentence a time or two, analyzing the pronouns to make some guesses as to what they might refer to, thinking of the various meanings which might apply to a certain verb, and scanning the context back a paragraph or two to fill in the information I needed to build the most likely meaning of the sentence.
For one small example, here's a sentence:
Suppose strtoull is called as strtoull("0789a", &next, base). According to the value of the parameter base, that string is interpreted differently.
After a few seconds of staring at that, I came up with the following translation:
Suppose strtoull is called as strtoull("0789a", &next, base). In this call, strtoull will interpret the string value "0789a" in the first parameter in one of several possible ways, depending on the value supplied by the parameter "base".
Yes, I can usually figure out what the writing in this book is saying. It's just that I have to spend at least half my cognitive bandwidth deciphering the basic meaning of even relatively simple sentences. The subject material is challenging enough without this overhead. By his own admission, Jens Gustedt comes from a mathematical background. I have found that most mathematicians think and express themselves differently from most other people. This book could be improved if someone with a writing background were to edit it thoroughly. Few sentences would be left untouched.
Despite its lack of clarity in writing, I still think this book is useful. If you have the time and mental energy to decipher the prose, it can teach you a lot. Sometimes, the fact that you're not comprehending something in the text leads you to research it on Stack Exchange until you are able to understand the text. This is actually a rewarding experience. Moreover, the book provides an excellent framework of concepts, presented in a sensible order, which you can use as a study plan to deepen your understanding by consulting other sources in the order in which the book presents them. Then, you will have a thorough understanding of not just the C language, but how the C compiler and linker turn your code into something the computer can understand in order to perform useful tasks.