Ostateczny przewodnik i lista książek C.

Feb 19 2009

To pytanie ma na celu zebranie utrzymywanej przez społeczność listy wysokiej jakości książek na temat języka programowania c , skierowanych do różnych poziomów umiejętności.

C to złożony język programowania, który jest trudny do opanowania w ruchu, czytając samouczki online. Obszerna książka jest często najlepszym sposobem na naukę języka, a znalezienie dobrej książki to pierwszy krok. Ważne jest, aby unikać źle napisanych książek, a co ważniejsze, książek zawierających poważne błędy techniczne.

Zaproponuj zmiany zaakceptowanej odpowiedzi, aby dodać książki wysokiej jakości, z przybliżonym poziomem umiejętności i krótkim opisem / opisem każdej książki. ( Zwróć uwagę, że pytanie jest zablokowane, więc żadne nowe odpowiedzi nie będą akceptowane. Pojedyncza odpowiedź jest utrzymywana wraz z listą )

Nie krępuj się dyskutować o wyborach książek, jakości, nagłówkach, podsumowaniach, poziomach umiejętności i wszystkim innym, co widzisz, że jest niewłaściwe. Książki uznane przez społeczność C za zadowalające pozostaną na liście; reszta będzie regularnie usuwana.

W przypadku książek, które mają recenzje wydane przez Association of C and C ++ Users (ACCU), link do tych recenzji należy dodać wraz z książką.

Zobacz też:

  • Inne zasoby związane z C na wiki tagów c
  • Podobna lista dla c ++ : The Definitive C ++ Book Guide and List

To pytanie zostało omówione w Meta w ramach Audytu pytań usuniętych 2018 .
Konsensus zakładał, że nie zostanie on usunięty i będzie aktywnie utrzymywany.

Odpowiedzi

503 JonathanLeffler Feb 19 2009 at 01:54

Ostrzeżenie !

To jest lista losowych książek o różnej jakości. W opinii niektórych osób (z pewnym uzasadnieniem) nie jest to już lista polecanych książek. Niektóre z wymienionych książek zawierają rażąco niepoprawne stwierdzenia lub uczą niewłaściwych / szkodliwych praktyk. Osoby, które są świadome istnienia takich książek, mogą edytować tę odpowiedź, aby ją ulepszyć. Zobacz Lista książek C oszalała. Co z tym zrobić? , a także Usunięto audyt pytań 2018 .

Odniesienie (wszystkie poziomy)

  • Język programowania C (wydanie drugie) - Brian W. Kernighan i Dennis M. Ritchie (1988). Wciąż dobre, krótkie, ale kompletne wprowadzenie do C (C90, a nie C99 lub późniejsze wersje), napisane przez wynalazcę C.Język jednak się zmienił i dobry styl C rozwinął się w ciągu ostatnich 25 lat i są części książka, która pokazuje jej wiek.

  • C: A Reference Manual (5th Edition) - Samuel P. Harbison i Guy R. Steele (2002). Doskonała książka informacyjna na temat C, do C99 włącznie. To nie jest samouczek i prawdopodobnie nie nadaje się dla początkujących. To wspaniale, jeśli musisz napisać kompilator dla C, tak jak autorzy musieli zrobić, kiedy zaczynali.

  • C Pocket Reference (O'Reilly) - Peter Prinz i Ulla Kirch-Prinz (2002).

  • Często zadawane pytania dotyczące comp.lang.c - Steve Summit. Witryna internetowa zawierająca odpowiedzi na wiele pytań dotyczących C.

  • Różne wersje standardów C językowych można znaleźć tutaj . Istnieje wersja internetowa projektu standardu C11 .

  • Nowy standard C - odniesienie z adnotacjami (bezpłatny PDF) - Derek M. Jones (2009). „Nowy standard” to stary standard C99, a nie C11.

  • Uzasadnienie dla C99 Standard .


Początkujący

  • C Programming: A Modern Approach (2nd Edition) - KN King (2008). Dobra książka do nauki C.

  • Programming in C (4th Edition) - Stephen Kochan (2014). Dobre ogólne wprowadzenie i samouczek.

  • C Primer Plus (5. edycja) - Stephen Prata (2004)

  • Książka o C - Al Kelley / Ira Pohl (1998).

  • The C Book (bezpłatny online) - Mike Banahan, Declan Brady i Mark Doran (1991).

  • C: Jak programować (8. wydanie) - Paul Deitel i Harvey M. Deitel (2015). Wiele dobrych wskazówek i sprawdzonych metod dla początkujących. Indeks jest bardzo dobry i służy jako przyzwoity punkt odniesienia (tylko nie w pełni wyczerpujący i bardzo płytki).

  • Head First C - David Griffiths i Dawn Griffiths (2012).

  • Beginning C (5th Edition) - Ivor Horton (2013). Bardzo dobre wyjaśnienie wskaźników, przy użyciu wielu małych, ale kompletnych programów.

  • Sams Teach Yourself C w 21 dni - Bradley L. Jones i Peter Aitken (2002). Bardzo dobre wprowadzenie.

Pośredni

  • Modern C - Jens Gustedt (2017 1st Edn; 2020 2nd Edn). Obejmuje C na 5 poziomach (spotkanie, znajomość, poznanie, doświadczenie, ambicja) od początku C do zaawansowanego C. Obejmuje C11 i C17, w tym wątki i dostęp atomowy, co robi niewiele innych książek. Nie wszystkie kompilatory rozpoznają te funkcje we wszystkich środowiskach.

  • C Interfejsy i implementacje - David R. Hanson (1997). Zawiera informacje o tym, jak zdefiniować granicę między interfejsem a implementacją w języku C w sposób ogólny i wielokrotnego użytku. Demonstruje również tę zasadę, stosując ją do implementacji typowych mechanizmów i struktur danych w języku C, takich jak listy, zbiory, wyjątki, manipulacja ciągami znaków, alokatory pamięci i inne. Zasadniczo Hanson wziął cały kod, który napisał w ramach budowania Icon i LCC, i wyciągnął najlepsze fragmenty w formie, którą inni ludzie mogliby ponownie wykorzystać w swoich własnych projektach. To model dobrego programowania w C z wykorzystaniem nowoczesnych technik projektowania (w tym abstrakcji danych Liskova), pokazujący, jak zorganizować duży projekt w C jako zbiór przydatnych bibliotek.

  • 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 (1997). 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 (1997).
  • 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.

  • Object-oriented Programming with ANSI-C (Free PDF) - Axel-Tobias Schreiner (1993). The code gets a bit convoluted. If you want C++, use C++. It only uses C90, of course.

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 (1998).

  • 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.


Uncategorized

  • Essential C (Free PDF) - Nick Parlante (2003). 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). This is the book of the web site listed earlier. It doesn't cover C99 or the later standards.

  • 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. It uses C++ and Java too.

  • 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.

  • 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, many programmers recommend reading and implementing 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 fewer 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 (1998, 2004, and the current version from 2012). 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 is 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) from 2007 and Advanced C (76 titles) from 2008. Most of these don't look to be on the main site anymore, and you can't browse that by subject anyway.


Warnings

There is a list of books and tutorials to be cautious about at the ISO 9899 Wiki, which is not itself formally associated with ISO or the C standard, but contains information about the C standard (though it hails the release of ISO 9899:2011 and does not mention the release of ISO 9899:2018).

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

Also do not use the book Let Us C (16th Edition, 2017) by Yashwant Kanetkar. Many people view it as an outdated book that teaches Turbo C and has lots of obsolete, misleading and incorrect material. For example, page 137 discusses the expected output from printf("%d %d %d\n", a, ++a, a++) and does not categorize it as undefined behaviour as it should. It also consistently promotes unportable and buggy coding practices, such as using gets, %[\n]s in scanf, storing return value of getchar in a variable of type char or using fflush on stdin.

Learn C The Hard Way (2015) by Zed Shaw. A book with mixed reviews. A critique of this book by Tim Hentenaar:

To summarize my views, which are laid out below, the author presents the material in a greatly oversimplified and misleading way, the whole corpus is a bundled mess, and some of the opinions and analyses he offers are just plain wrong. I've tried to view this book through the eyes of a novice, but unfortunately I am biased by years of experience writing code in C. It's obvious to me that either the author has a flawed understanding of C, or he's deliberately oversimplifying to the point where he's actually misleading the reader (intentionally or otherwise).

"Learn C The Hard Way" is not a book that I could recommend to someone who is both learning to program and learning C. If you're already a competent programmer in some other related language, then it represents an interesting and unusual exposition on C, though I have reservations about parts of the book. Jonathan Leffler


Outdated

  • Practical C Programming (3rd Edition) - Steve Oualline (1997)(Beginner)

Other contributors, not necessarily credited in the revision history, include:
Alex Lockwood, Ben Jackson, Bubbles, claws, coledot, Dana Robinson, Daniel Holden, Dervin Thunk, dwc, Erci Hou, Garen, haziz, Johan Bezem, Jonathan Leffler, Joshua Partogi, Lucas, Lundin, Matt K., mossplix, Matthieu M., midor, Nietzche-jou, Norman Ramsey, r3st0r3, ridthyself, Robert S. Barnes, Steve Summit, Tim Ring, Tony Bai, VMAtm