Der endgültige C-Buchführer und die Liste

400

Diese Frage versucht eine Gemeinschaft gepflegt Liste zu sammeln Qualität Bücher über die Programmiersprache für verschiedene Schwierigkeitsgrade.

C ist eine komplexe Programmiersprache, die unterwegs nur schwer durch Lesen von Online-Tutorials zu erlernen ist. Ein umfassendes Buch ist oft der beste Weg, um die Sprache zu lernen, und ein gutes Buch zu finden, ist der erste Schritt. Es ist wichtig, schlecht geschriebene Bücher und vor allem Bücher mit schwerwiegenden technischen Fehlern zu vermeiden.

Bitte schlagen Sie Änderungen an der akzeptierten Antwort vor, um qualitativ hochwertige Bücher mit einem ungefähren Kenntnisstand und einem kurzen Klappentext / einer Beschreibung zu jedem Buch hinzuzufügen. ( Beachten Sie, dass die Frage gesperrt ist, sodass keine neuen Antworten akzeptiert werden. Eine einzelne Antwort mit der Liste wird beibehalten. )

Sie können gerne über Buchauswahl, Qualität, Überschriften, Zusammenfassungen, Fähigkeiten und alles andere diskutieren, was falsch ist. Bücher, die von der C-Community hier als zufriedenstellend eingestuft werden, bleiben auf der Liste. Der Rest wird regelmäßig entfernt.

Bei Büchern mit Rezensionen der Association of C and C ++ Users (ACCU) sollte zusammen mit dem Buch ein Link zu diesen Rezensionen hinzugefügt werden.

Siehe auch:


Diese Frage wurde auf Meta im Rahmen des Audits für gelöschte Fragen 2018 erörtert .
Der Konsens bestand darin, es nicht gelöscht und aktiv aufrechtzuerhalten.

lillq
quelle
31
Nicht um die Frage herabzusetzen, was gut ist, aber ... die meisten Leute brauchen Jahre, um K & R zu meistern. Da ist mehr drin als du denkst. Die Dünnheit des Buches täuscht.
dmckee --- Ex-Moderator Kätzchen
4
Wenn Sie neu in C sind, denken Sie daran, dass modernes C ANSI C ist und alles, was vor diesem Standard (1989) liegt, möglicherweise veraltet ist. Schießen Sie für die Mitte der 90er Jahre oder später.
Dana Robinson
7
@Dhaivat Ich denke nicht, sei vorsichtig, auf den K & R Zug zu springen. K & R befasst sich weder mit gutem Programmdesign noch mit guter Programmierpraxis, hauptsächlich weil es ursprünglich geschrieben wurde, bevor jemand wusste, was gute Programmierpraxis ist. Es wird nicht erwähnt, welche Teile der C-Sprache überflüssig oder sogar gefährlich sind. Das Buch ist korrekt als Referenzhandbuch aufgeführt und sollte nicht zum Lehren / Lernen moderner Programmierung verwendet werden.
Lundin
Ich stimme Dana zu, dass nichts, was vor den ANSI / ISO-Standardisierungen in 89/90 geschrieben wurde, auf einer solchen Liste erscheinen sollte. Sie können auch angeben, welche Bücher sich mit C99 befassen und welche nicht.
Lundin

Antworten:

492

Warnung

Dies ist eine Liste von zufälligen Büchern unterschiedlicher Qualität. Nach Ansicht einiger Leute (mit einigem Recht) handelt es sich nicht mehr um eine Liste empfohlener Bücher. Einige der aufgelisteten Bücher enthalten offensichtlich falsche Aussagen oder lehren falsche / schädliche Praktiken. Personen, die solche Bücher kennen, können diese Antwort bearbeiten, um sie zu verbessern. Siehe Die C-Buchliste ist durcheinander geraten. Was soll man damit machen? und auch Audit für gelöschte Fragen 2018 .

Referenz (Alle Ebenen)

  • Die Programmiersprache C (2. Auflage) - Brian W. Kernighan und Dennis M. Ritchie (1988). Immer noch eine gute, kurze, aber vollständige Einführung in C (C90, nicht C99 oder spätere Versionen), geschrieben vom Erfinder von C. Die Sprache hat sich jedoch geändert und in den letzten 25 Jahren hat sich ein guter C-Stil entwickelt, und es gibt Teile von das Buch, das sein Alter zeigt.

  • C: Ein Referenzhandbuch (5. Auflage) - Samuel P. Harbison und Guy R. Steele (2002). Ein ausgezeichnetes Nachschlagewerk über C bis einschließlich C99. Es ist kein Tutorial und wahrscheinlich nicht für Anfänger geeignet. Es ist großartig, wenn Sie einen Compiler für C schreiben müssen, wie es die Autoren zu Beginn tun mussten.

  • C Taschenreferenz (O'Reilly) - Peter Prinz und Ulla Kirch-Prinz (2002).

  • Die comp.lang.c FAQ - Steve Summit. Website mit Antworten auf viele Fragen zu C.

  • Verschiedene Versionen der C-Sprachstandards finden Sie hier . Es gibt eine Online-Version des Entwurfs des C11-Standards .

  • Der neue C-Standard - eine kommentierte Referenz (kostenloses PDF) - Derek M. Jones (2009). Der "neue Standard", auf den Bezug genommen wird, ist der alte C99-Standard und nicht C11.

  • Begründung für den C99-Standard .


Anfänger

Mittlere

  • Modernes C - Jens Gustedt (2017 1. Ausgabe; 2020 2. Ausgabe). Deckt C in 5 Ebenen (Begegnung, Bekanntschaft, Erkenntnis, Erfahrung, Ehrgeiz) von Anfang C bis Fortgeschrittene C ab. Es behandelt C11 und C17, einschließlich Threads und atomaren Zugriff, wie es nur wenige andere Bücher tun. Nicht alle Compiler erkennen diese Funktionen in allen Umgebungen.

  • C Schnittstellen und Implementierungen - David R. Hanson (1997). Bietet Informationen zum generischen und wiederverwendbaren Definieren einer Grenze zwischen einer Schnittstelle und der Implementierung in C. Dieses Prinzip wird auch demonstriert, indem es auf die Implementierung allgemeiner Mechanismen und Datenstrukturen in C angewendet wird, z. B. Listen, Mengen, Ausnahmen, Zeichenfolgenmanipulation, Speicherzuordnungen und mehr. Im Grunde genommen nahm Hanson den gesamten Code, den er beim Erstellen von Icon und lcc geschrieben hatte, und holte die besten Teile in einer Form heraus, die andere Leute für ihre eigenen Projekte wiederverwenden konnten. Es ist ein Modell für eine gute C-Programmierung unter Verwendung moderner Entwurfstechniken (einschließlich der Datenabstraktion von Liskov), das zeigt, wie ein großes C-Projekt als eine Reihe nützlicher Bibliotheken organisiert wird.

  • Das C-Puzzle-Buch - Alan R. Feuer (1998)

  • Die Standard C Bibliothek - PJ Plauger (1992). Es enthält den vollständigen Quellcode für eine Implementierung der C89-Standardbibliothek sowie eine ausführliche Diskussion über das Design und warum der Code wie gezeigt entworfen wurde.

  • C: C-Tipps des 21. Jahrhunderts von der neuen Schule - Ben Klemens (2012). Zusätzlich zur C-Sprache erklärt das Buch gdb, valgrind, autotools und git. Die Kommentare zum Stil finden Sie im letzten Teil (Kapitel 6 und darüber hinaus).

  • Algorithmen in C - Robert Sedgewick (1997). Gibt Ihnen einen guten Einblick in die Implementierung von Algorithmen in C. Sehr klar und klar; wird Sie wahrscheinlich dazu bringen, all Ihre anderen Algorithmenbücher wegzuwerfen und dieses zu behalten.

  • Hinweise auf C - Kenneth Reek (1997).

  • Zeiger in C - Naveen Toppo und Hrishikesh Dewan (2013).

  • Problemlösung und Programmgestaltung in C (6. Auflage) - Jeri R. Hanly und Elliot B. Koffman (2009).

  • Datenstrukturen - Ein fortschrittlicher Ansatz unter Verwendung von C - Jeffrey Esakov und Tom Weiss (1989).

  • C entfesselt - Richard Heathfield, Lawrence Kirby et al. (2000). Nicht ideal, aber es lohnt sich für fortgeschrittene Programmierer, die in diesem Buch beschriebenen Probleme zu üben. Dies ist ein guter kochbuchähnlicher Ansatz, der von Comp.lang.c-Mitarbeitern vorgeschlagen wird.

Experte


Nicht kategorisiert

  • Essential C (kostenloses PDF) - Nick Parlante (2003). Beachten Sie, dass dies die C90-Sprache an mehreren Stellen beschreibt ( z. B. bei der Erörterung von //Kommentaren und der Platzierung von Variablendeklarationen an beliebigen Stellen im Code). Daher sollte sie mit einiger Vorsicht behandelt werden.

  • C Häufig gestellte Fragen zur Programmierung: Häufig gestellte Fragen - Steve Summit (1995). Dies ist das Buch der zuvor aufgeführten Website. C99 oder die späteren Standards werden nicht behandelt.

  • C auf den Punkt gebracht - Peter Prinz und Tony Crawford (2005). Ausgezeichnetes Buch, wenn Sie eine Referenz für C99 benötigen.

  • Funktionale C - Pieter Hartel und Henk Müller (1997). Lehrt moderne Praktiken, die für die Programmierung auf niedriger Ebene von unschätzbarem Wert sind, unter Berücksichtigung von Parallelität und Modularität.

  • Die Programmierpraxis - Brian W. Kernighan und Rob Pike (1999). Ein sehr gutes Buch zur Begleitung von K & R. Es verwendet auch C ++ und Java.

  • C Fallen und Fallstricke von A. Koenig (1989). Sehr gut, aber der C-Stil datiert vor Standard C, was ihn heutzutage weniger empfehlenswert macht.

    Einige haben sich dafür ausgesprochen, "Fallen und Fallstricke" aus dieser Liste zu streichen, weil dadurch einige Leute in Fehler geraten sind. andere argumentieren weiterhin für seine Aufnahme. Vielleicht sollte es als "Expertenbuch" angesehen werden, da es ein mäßig umfangreiches Wissen über C erfordert, um zu verstehen, was sich seit seiner Veröffentlichung geändert hat.

  • Bauen Sie Ihr eigenes Lisp - Daniel Holden (2014). Eine unterhaltsame Art, C. zu lernen.

  • MISRA-C - Industriestandard, veröffentlicht und gepflegt von der Motor Industry Software Reliability Association. Deckt C89 und C99 ab.

    Obwohl dies kein Buch als solches ist, empfehlen viele Programmierer, so viel wie möglich davon zu lesen und zu implementieren. MISRA-C war ursprünglich als Richtlinie für sicherheitskritische Anwendungen gedacht, gilt jedoch für alle Anwendungsbereiche, in denen stabiler, fehlerfreier C-Code gewünscht wird (wer möchte nicht weniger Fehler?). MISRA-C wird zum De-facto-Standard in der gesamten Embedded-Branche und wird auch in anderen Programmierbranchen immer beliebter. Es gibt (mindestens) drei Veröffentlichungen des Standards (1998, 2004 und die aktuelle Version von 2012). Es gibt auch ein Dokument mit den MISRA-Konformitätsrichtlinien aus dem Jahr 2016 und MISRA C: 2012, Änderung 1 - Zusätzliche Sicherheitsrichtlinien für MISRA C: 2012 (veröffentlicht im April 2016).
    Beachten Sie, dass einige der Einschränkungen in den MISRA-Regeln nicht für jeden Kontext geeignet sind. In der Richtlinie 4.12 heißt es beispielsweise "Dynamische Speicherzuweisung darf nicht verwendet werden". Dies ist in den eingebetteten Systemen angemessen, für die die MISRA-Regeln entwickelt wurden. es ist nicht überall angebracht. (Compiler verwenden beispielsweise im Allgemeinen die dynamische Speicherzuweisung für Dinge wie Symboltabellen, und es wäre schwierig, wenn nicht absurd, auf eine dynamische Speicherzuweisung zu verzichten.)

  • Archivierte Listen von ACCU-geprüften Büchern zu Beginner's C (116 Titel) aus dem Jahr 2007 und Advanced C (76 Titel) aus dem Jahr 2008. Die meisten davon scheinen nicht mehr auf der Hauptseite zu sein, und Sie können sie nicht nach Themen durchsuchen wie auch immer.


Warnungen

Seien Sie vorsichtig mit Büchern von Herbert Schildt . Insbesondere sollten Sie sich von C: The Complete Reference (4. Auflage, 2000) fernhalten , das in einigen Kreisen als C: The Complete Nonsense bekannt ist.

Verwenden Sie auch nicht das Buch Let Us C (16 th Edition 2017) von Yashwant Kanetkar. Viele Leute sehen es als ein veraltetes Buch an, das Turbo C lehrt und viel veraltetes, irreführendes und falsches Material enthält. Auf Seite 137 wird beispielsweise die erwartete Ausgabe von erläutert printf("%d %d %d\n", a, ++a, a++)und nicht als undefiniertes Verhalten eingestuft, wie es sollte.

Lerne C The Hard Way (2015) von Zed Shaw. Ein Buch mit gemischten Rezensionen. Eine Kritik dieses Buches von Tim Hentenaar:

Um meine Ansichten zusammenzufassen, die im Folgenden dargelegt werden, präsentiert der Autor das Material auf stark vereinfachte und irreführende Weise, der gesamte Korpus ist ein gebündeltes Durcheinander, und einige der von ihm angebotenen Meinungen und Analysen sind einfach falsch. Ich habe versucht, dieses Buch mit den Augen eines Anfängers zu betrachten, aber leider bin ich voreingenommen durch jahrelange Erfahrung beim Schreiben von Code in C. Es ist mir klar, dass entweder der Autor ein fehlerhaftes Verständnis von C hat oder er es absichtlich zu stark vereinfacht Punkt, an dem er den Leser tatsächlich irreführt (absichtlich oder auf andere Weise).

"Learn C The Hard Way" ist kein Buch, das ich jemandem empfehlen könnte, der sowohl das Programmieren als auch das Lernen von C lernt. Wenn Sie bereits ein kompetenter Programmierer in einer anderen verwandten Sprache sind, dann ist es eine interessante und ungewöhnliche Darstellung von C, obwohl ich Vorbehalte gegen Teile des Buches habe. Jonathan Leffler


Veraltet


Andere Mitwirkende , die nicht unbedingt in der Revisionsgeschichte aufgeführt sind, sind:
Alex Lockwood , Ben Jackson , Blasen , Krallen , Coledot , Dana Robinson , Daniel Holden , Dervin Thunk , Dwci , Erci Hou , Garen , Haziz , Johan Bezem , Jonathan Leffler , Joshua Partogi , Lucas , Lundin , Matt K. , Mossplix , Matthieu M. , Midor , Nietzche-jou , Norman Ramsey , r3st0r3 , sich selbst , Robert S. Barnes , Steve Summit , Tim Ring , Tony Bai , VMAtm

Jonathan Leffler
quelle
6
@ PabloBarríaUrenda Ungeeignete Inhalte sollten durch Markieren des Beitrags behoben werden. "Zwei Klicks entfernt" ist jedoch eine dumme Aussage, sodass Ihre Flagge wahrscheinlich abgelehnt wird. Und jede Debatte darüber, ob die erwähnte Flagge beleidigend ist oder nicht, sollte auch nicht hier sein. Veröffentlichen Sie solche Bedenken stattdessen auf meta.stackoverflow.com .
Lundin
1
Was ist dumm an "zwei Klicks entfernt"?
Pablo Barría Urenda
3
Als das Jahr 2019 fand ich das Buch <Modern C>sehr lesenswert, es verwendet viel c99 & c11 Syntax, sehr kompakt und gut geschrieben. Und weisst du was? Es ist kostenlos !!! Sie können die neueste Version hier als PDF herunterladen: icube-icps.unistra.fr/img_auth.php/d/db/ModernC.pdf ( Übrigens , der Autor aktualisiert und veröffentlicht das Buch bei Bedarf unter dem obigen Link)
Eric Wang
1
Ich wollte gerade ein Buch hinzufügen, um festzustellen, dass es als nicht empfohlen herausgeschnitten wurde. Vielleicht lassen Sie diese in der Post sichtbar und geben Sie die Gründe an, warum dies vermieden werden sollte. Vielleicht sogar ein separater Abschnitt von NICHT empfohlenen Büchern?
gst
3
Ich habe erfolglos versucht, die Antwort zu bearbeiten (anscheinend aufgrund einer falschen Formatierung, die bereits vor dem Bearbeiten angezeigt wird). Auf jeden Fall werden hier mindestens zwei empfohlene Bücher als "zu vermeiden" aufgeführt: iso-9899.info/wiki/Main_Page#Stuff_that_should_be_avoided . Bitte entfernen Sie "Build your own Lisp" und "Learn C the hard way" und fügen Sie den obigen Link zum Abschnitt " Warnungen " hinzu.
gst