Hallo an alle!



  • Wie SeppJ schon geschrieben hat, wurde The Definitive C Book Guide and List gelöscht.

    Ich habe die Bücherliste noch: [Stand: Oktober 2017]

    This question attempts to collect a community-maintained list of quality books on the C programming language, targeted at various skill levels.

    C is a complex programming language that is difficult to pick up on-the-go by reading online tutorials. A comprehensive book is often the best way to learn the language, and finding a good book is the first step. It is important to avoid badly-written books, and even more importantly, books that contain serious technical errors.

    Please suggest edits to the accepted answer to add quality books, with an approximate skill level and a short blurb/description about each book. (Note that the question is locked, so no new answers will be accepted. A single answer is being maintained with the list.)

    Feel free to debate book choices, quality, headings, summaries, skill levels, and anything else you see that is wrong. Books that are deemed satisfactory by the C community here will stick around on the list; the rest will be regularly removed.

    For books that have reviews by the Association of C and C++ Users (ACCU), a link to those reviews should be added along with the book.

    Reference (All Levels)

    • The C Programming Language (2nd Edition) - Brian W. Kernighan and Dennis M. Ritchie (1988). Still a good, short but complete introduction to C, written by the the inventor of C. However, the language has changed and good C style has developed in the last 25 years, and there are parts of the book that show its age.
    • C: A Reference Manual (5th Edition) - Samuel P. Harbison and Guy R. Steele (2002). An excellent reference book on C, up to and including C99. It is not a tutorial, and probably unfit for beginners. It's great if you need to write a compiler for C, as the authors had to do when they started.
    • C Pocket Reference (O'Reilly) - Peter Prinz and Ulla Kirch-Prinz
    • The comp.lang.c FAQ - Steve Summit. Web site with answers to many questions about C.
    • Various versions of the C language standards can be found here.
    • The new C standard - an annotated reference (Free PDF) - Derek M. Jones. The "new standard" referred to is the old C99 standard rather than C11.
    • Rationale for C99 Standard

    Beginner

    • Programming in C (4th Edition) - Stephen Kochan (2014). A good general introduction and tutorial.
    • C Primer Plus (5th Edition) - Stephen Prata (2004)
    • C Programming: A Modern Approach (2nd Edition) - K. N. King (2008). A good book for learning C.
    • A Book on C - Al Kelley/Ira Pohl
    • The C Book (Free Online) - Mike Banahan, Declan Brady, and Mark Doran
    • Practical C Programming (3rd Edition) - Steve Oualline (1997)
    • C: How to Program (6th Edition) - Paul Deitel and Harvey M. Deitel. Lots of good tips and best practices for beginners. The index is very good and serves as a decent reference (just not fully comprehensive, and very shallow).
    • Head First C - David Griffiths and Dawn Griffiths
    • Beginning C (5th Edition) - Ivor Horton. Very good explanation of pointers, using lots of small but complete programs.
    • Sams Teach Yourself C in 21 Days - Bradley L. Jones and Peter Aitken (2002). Very good introductory stuff.
    • Learn C The Hard Way - Zed Shaw. A tutorial for beginners who aim for modern practices, with a focus on safety and security. See the preamble for more. Warning: this book is not for the faint of heart, but that is its strength—it does not try to shield you from the truth, but exposes the gory details and then explains how to cope with them. Also, the book teaches C the Linux way, which some may see as a strength and others as an overly-restrictive handicap.
    • Applications Programming in ANSI C - Richard Johnsonbaugh and Martin Kalin (1996).

    Intermediate

    • Object-oriented Programming with ANSI-C (Free PDF) - Axel-Tobias Schreiner
    • C Interfaces and Implementations - David R. Hanson. Provides information on how to define a boundary between an interface and implementation in C in a generic and reusable fashion. It also demonstrates this principle by applying it to the implementation of common mechanisms and data structures in C, such as lists, sets, exceptions, string manipulation, memory allocators, and more. Basically, Hanson took all the code he'd written as part of building Icon and lcc and pulled out the best bits in a form that other people could reuse for their own projects. It's a model of good C programming using modern design techniques (including Liskov's data abstraction), showing how to organize a big C project as a bunch of useful libraries.
    • The C Puzzle Book - Alan R. Feuer (1998)
    • The Standard C Library - P.J. Plauger (1992). It contains the complete source code to an implementation of the C89 standard library, along with extensive discussion about the design and why the code is designed as shown.
    • 21st Century C: : C Tips from the New School - Ben Klemens (2012). In addition to the C language, the book explains gdb, valgrind, autotools, and git. The comments on style are found in the last part (Chapter 6 and beyond).
    • Algorithms in C - Robert Sedgewick. Gives you a real grasp of implementing algorithms in C. Very lucid and clear; will probably make you want to throw away all of your other algorithms books and keep this one.
    • Pointers on C - Kenneth Reek
    • Pointers in C - Naveen Toppo and Hrishikesh Dewan
    • Problem Solving and Program Design in C (6th Edition) - Jeri R. Hanly and Elliot B. Koffman (2009).
    • Data Structures - An Advanced Approach Using C - Jeffrey Esakov and Tom Weiss (1989).
    • C Unleashed - Richard Heathfield, Lawrence Kirby, et al. (2000). Not ideal, but it is worth intermediate programmers practicing problems written in this book. This is a good cookbook-like approach suggested by comp.lang.c contributors.

    Expert

    • Expert C Programming: Deep C Secrets - Peter van der Linden (1994). Lots of interesting information and war stories from the Sun compiler team, but a little dated in places.
    • Advanced C Programming by Example - John W. Perry
    • Advanced Programming in the UNIX Environment - Richard W. Stevens and Stephen A. Rago (2013). Comprehensive description of how to use the Unix APIs from C code, but not so much about the mechanics of C coding.
    • Advanced C: Food for the Educated Palate - Narain Gehani (1985). Great on pointers, pointers to functions, and a variety of advanced topics, such as how stuff is stored in memory, dynamic memory, stack usage, function calling, parameter passing, etc. Assumes you have a good grasp of C to start with. Warning: pre-dates the ANSI standard and a lot of modern programming design.
    • Computer Programming: An Introduction for the Scientifically Inclined - Sander Stoks (2008). Great book about scientific use of programming languages.
    • Reversing: Secrets of Reverse Engineering - Eldad Eilam (2005). For those who want to test the limits of their ethics.

    Uncategorized

    • Essential C (Free PDF) - Nick Parlante. Note that this describes the C90 language at several points (e.g., in discussing // comments and placement of variable declarations at arbitrary points in the code), so it should be treated with some caution.
    • C Programming FAQs: Frequently Asked Questions - Steve Summit (1995).
    • C in a Nutshell - Peter Prinz and Tony Crawford (2005). Excellent book if you need a reference for C99.
    • Functional C - Pieter Hartel and Henk Muller (1997). Teaches modern practices that are invaluable for low-level programming, with concurrency and modularity in mind.
    • The Practice of Programming - Brian W. Kernighan and Rob Pike (1999). A very good book to accompany K&R.
    • C Traps and Pitfalls by A. Koenig (1989). Very good, but the C style pre-dates standard C, which makes it less recommendable these days.

    Some have argued for the removal of 'Traps and Pitfalls' from this list because it has trapped some people into making mistakes; others continue to argue for its inclusion. Perhaps it should be regarded as an 'expert' book because it requires a moderately extensive knowledge of C to understand what's changed since it was published.

    • Computer Systems: A Programmer's Perspective (3rd Edition) - Randal E. Bryant and David R. O'Hallaron (2015). Explains the C language in a disjointed narrative style, like Pulp Fiction.
    • Abstraction and Specification in Program Development - Barbara Liskov and John V. Guttag (1986) (not the newer Java-based version by Liskov alone). This is an undergraduate text, with some ideas worth thinking about.
    • Composite/Structured Design - Glenford J. Myers (1978). This and other books from the late 1970s and early 1980s by Yourdon and Myers provide excellent insights on structured design.
    • Build Your Own Lisp. An enjoyable way to learn C.
    • MISRA-C - industry standard published and maintained by the Motor Industry Software Reliability Association. Covers C89 and C99.

    Although this isn't a book as such, every experienced C programmer should read and implement as much of it as possible. MISRA-C was originally intended as guidelines for safety-critical applications in particular, but it applies to any area of application where stable, bug-free C code is desired (who doesn't want less bugs?). MISRA-C is becoming the de facto standard in the whole embedded industry and is getting increasingly popular even in other programming branches. There are (at least) three publications of the standard, one from 1998, one from 2004, and one from 2012, where the last is the currently active, relevant one. There is also a MISRA Compliance Guidelines document from 2016, and MISRA C:2012 Amendment 1 — Additional Security Guidelines for MISRA C:2012 (published in April 2016). Note that some of the strictures in the MISRA rules are not appropriate to every context. For example, directive 4.12 states "Dynamic memory allocation shall not be used". This may well be appropriate in the embedded systems for which the MISRA rules are designed; it is not appropriate everywhere. (Compilers, for instance, generally use dynamic memory allocation for things like symbol tables, and to do without dynamic memory allocation would be difficult, if not preposterous.)

    • Archived lists of ACCU-reviewed books on Beginner's C (116 titles) and Advanced C (76 titles). Most of these don't look to be on the main site anymore, and you can't browse that by subject anyway.

    Warnings

    Be wary of books written by Herbert Schildt. In particular, you should stay away from C: The Complete Reference, known in some circles as C: The Complete Nonsense.

    Also be wary of the book "Let Us C" by Yashwant Kanetkar. It is a horribly outdated book that teaches Turbo C and has lot of obsolete, misleading and downright incorrect material.

    Eventuell kann man das ja auch nach Thread für Neulinge verschieben.


  • Mod

    Der Grund für die Löschung der Liste war mangelnde Qualitätssicherung bei unkontrollierter Wucherung, daher wäre ich skeptisch, wenn ich solch eine lange Liste sehe, von der ich nur wenige Titel je gehört habe.



  • Morgen Leute!

    Wie viele C Bibliotheken gibt es den in C ?
    Und wozu sind die Bibliotheken gut ?

    MFG
    Neuling999


  • Mod

    Blurry, bist du das?



  • SeppJ schrieb:

    Blurry, bist du das?

    Hallo, wen meinst du ?
    Mich oder ein anderen Nutzer ?

    MFG
    Neuling999



  • SeppJ schrieb:

    Auch andere Menschen können das blurry-Attribut haben 🙂 .


  • Mod

    Swordfish schrieb:

    SeppJ schrieb:

    Auch andere Menschen können das blurry-Attribut haben 🙂 .

    Vielleicht. Trotzdem habe ich das Gefühl, verarscht zu werden. Das mit dem int war schon verdächtig, das mit dem Variablennamen grenzwertig, aber das mit den Bibliotheken war zu dick aufgetragen. Es kann umgekehrt Menschen geben, die die gleichen Pläne wie blurry333 haben, aber nicht wie blurry333 schreiben. Zumal der einzige Unterschied zu blurry333 hier im Schreibstil liegt, der viel "normaler" und interaktiver ist als bei blurry333. Bis auf diese beiden Abweichungen hat Neuling999 alle verbleibenden sechs der acht typischerweise mit blurry333 assoziierten Verhaltensweisen. Er hat sogar ein Vielfaches von 333 im Namen!

    Mein Gefühl ist, dass er blurry333 persönlich ist, aber wenn er es nicht ist, dann hat er mindestens die gleichen Absichten. Und auf letzteres kommt es ja eigentlich an, schließlich führe ich keinen Feldzug gegen die Person von blurry333, sondern für die Qualität des Forums.



  • Hallo!

    Ich bin und war nie der blurry333, und kenne auch keinen mit dem Namen.
    Warum ich C lernen will ist, das ich eventuell meine eigene Linux Oberfläche programmieren möchte. Bestimmt ein hohe Ziel bei meinen Kenntnissen.

    MFG
    Neuling999



  • also wenn du ordentlich durchpaukst und dann bereit bist, englisch zu lernen, um die dokumentation der xcb lesen zu können, wird das bestimmt was in so 5 jahren.



  • Wade1234 schrieb:

    also wenn du ordentlich durchpaukst und dann bereit bist, englisch zu lernen, um die dokumentation der xcb lesen zu können, wird das bestimmt was in so 5 jahren.

    Hallo!

    5 Jahre sind bestimmt noch optimistisch gemeint.
    Eventuell brauch ich länger.

    MFG
    Neuling999


Anmelden zum Antworten