about this book
The C programming language has been around since the early 1970s. Since then, C has been used in an incredible number of applications. Programs and systems written in C are all around us, in personal computers, phones, cameras, set-top boxes, refrigerators, cars, mainframes, and satellites—basically in any modern device that has a programmable interface.
In contrast to the ubiquitous presence of C programs and systems, good knowledge of and about C is much scarcer. Even experienced C programmers often appear to be stuck in some degree of self-inflicted ignorance about the modern evolution of the C language. A likely reason for this is that C is seen as an easy-to-learn language, allowing a programmer with little experience to quickly write or copy snippets of code that at least appear to do what they are supposed to. In a way, C fails to motivate its users to climb to higher levels of knowledge.
This book is intended to change that general attitude, so it is organized into levels that reflect familiarity with the C language and programming in general. This structure may go against some habits of the book’s readers; in particular, it splits some difficult subjects (such as pointers) across levels to avoid swamping readers too early with the wrong information. We’ll explain the book’s organization in more detail shortly.