De definitieve C Book Guide en lijst

Met deze vraag wordt geprobeerd een door de community onderhouden lijst van boeken van kwaliteitte verzamelen over de cprogrammeertaal, gericht op verschillende vaardigheidsniveaus.

C is een complexe programmeertaal die moeilijk onderweg te leren is door online tutorials te lezen. Een uitgebreid boek is vaak de beste manier om de taal te leren, en het vinden van een goed boek is de eerste stap. Het is belangrijk om slecht geschreven boeken te vermijden, en nog belangrijker, boeken die ernstige technische fouten bevatten.

Stel a.u.b. wijzigingen voor het geaccepteerde antwoord voor om kwaliteitsboeken toe te voegen, met een geschat vaardigheidsniveau en een korte toelichting/beschrijving van elk boek. (Houd er rekening mee dat de vraag is vergrendeld, dus nieuwe antwoorden worden niet geaccepteerd. Er wordt één antwoord bijgehouden met de lijst)

Voel je vrij om te discussiëren over boekkeuzes, kwaliteit, koppen, samenvattingen, vaardigheidsniveaus en al het andere dat je ziet dat verkeerd is. Boeken die door de C-gemeenschap hier als bevredigend worden beschouwd, blijven op de lijst staan; de rest wordt regelmatig verwijderd.

Voor boeken met recensies van de Association of C and C++ Users (ACCU), moet een link naar die recensies samen met het boek worden toegevoegd.

Zie ook:


Deze vraag is besproken op Metaals onderdeel van de Deleted Questions Audit 2018.
De consensus was om de verwijdering ongedaan te maken en actief te onderhouden.


Antwoord 1, autoriteit 100%

Waarschuwing!

Dit is een lijst met willekeurige boeken van uiteenlopende kwaliteit. Volgens sommige mensen (met enige motivering) is het niet langer een lijst met aanbevolen boeken. Sommige van de genoemde boeken bevatten flagrant onjuiste uitspraken of leren verkeerde/schadelijke praktijken. Mensen die dergelijke boeken kennen, kunnen dit antwoord bewerken om het te verbeteren.
Zie De C-boekenlijst heeft in de war geraakt. Wat ermee te doen?, en ook Vragenaudit 2018 verwijderd.

Referentie (alle niveaus)

  • De C-programmeertaal (2e editie)– Brian W. Kernighan en Dennis M. Ritchie (1988). Nog steeds een goede, korte maar volledige inleiding tot C (C90, niet C99 of latere versies), geschreven door de uitvinder van C. De taal is echter veranderd en een goede C-stijl heeft zich de afgelopen 25 jaar ontwikkeld, en er zijn delen van het boek dat zijn leeftijd laat zien.

  • C: een referentiehandleiding (5e editie)– Samuel P. Harbison en Guy R. Steele (2002). Een uitstekend naslagwerk over C, tot en met C99. Het is geen tutorial en waarschijnlijk niet geschikt voor beginners. Het is geweldig als je een compiler voor C moet schrijven, zoals de auteurs moesten doen toen ze begonnen.

  • C Pocket-referentie (O’Reilly)– Peter Prinz en Ulla Kirch-Prinz (2002).

  • De comp.lang.c FAQ– Steve Summit. Website met antwoorden op veel vragen over C.

  • Verschillende versies van de C-taalstandaarden zijn hierte vinden. Er is een online versie van de concept C11-standaard.

  • De nieuwe C-standaard – een geannoteerde referentie(gratis PDF) – Derek M. Jones (2009). De “nieuwe standaard” waarnaar wordt verwezen is de oude C99-standaard in plaats van C11.

  • Rationale voor C99-standaard.


Beginner

  • c in eenvoudige stappen (5e editie ) – Mike McGrath (2018). Het is een goed boek voor het leren en verwijzen c.

  • effectief C – Robert C Seacord (2020). Een goede inleiding tot moderne C, inclusief hoofdstukken op dynamische geheugentoewijzing, op programmastructuur en op debugging, testen en analyse. Het heeft enkele aanwijzingen in de richting van de waarschijnlijke C2X-functies.

Intermediate

  • moderne C – Jens gustedt (2017 1e edn; 2020 2e edn). Covers C In 5 niveaus (ontmoeting, kennismaking, cognitie, ervaring, ambitie) van begin C tot geavanceerde C. Het heeft betrekking op C11 en C17, inclusief draden en atomaire toegang, welke andere boeken doen. Niet alle compilers erkennen deze functies in alle omgevingen.

  • C-interfaces en implementaties– David R. Hanson (1997 ). Biedt informatie over het definiëren van een grens tussen een interface en implementatie in C op een generieke en herbruikbare manier. Het demonstreert dit principe ook door het toe te passen op de implementatie van algemene mechanismen en datastructuren in C, zoals lijsten, sets, uitzonderingen, stringmanipulatie, geheugentoewijzers en meer. In feite nam Hanson alle code die hij had geschreven als onderdeel van het bouwen van Iconen lccen haalden de beste stukjes eruit in een vorm die andere mensen konden hergebruiken voor hun eigen projecten. Het is een model van goede C-programmering met behulp van moderne ontwerptechnieken (inclusief Liskov’s data-abstractie), die laat zien hoe een groot C-project kan worden georganiseerd als een aantal nuttige bibliotheken.

  • Het C-puzzelboek– Alan R. Feuer ( 1998)

  • De standaard C-bibliotheek– PJ Plauger (1992) . Het bevat de volledige broncode voor een implementatie van de C89-standaardbibliotheek, samen met uitgebreide discussies over het ontwerp en waarom de code is ontworpen zoals weergegeven.

  • 21st Century C: C Tips van de nieuwe school-Ben Klemens (2012). Naast de C-taal legt het boek gdb, valgrind, autotools en git uit. De opmerkingen over stijl zijn te vinden in het laatste deel (hoofdstuk 6 en verder).

  • Algoritmen in C– Robert Sedgewick (1997). Geeft je een goed begrip van het implementeren van algoritmen in C. Zeer helder en duidelijk; zal ervoor zorgen dat je al je andere algoritmeboeken wilt weggooien en deze wilt houden.

  • Extreme C: verleg de grenzen van wat C en jij kunt doen– Kamran Amini ( 2019). Dit boek bouwt voort op uw bestaande C-kennis om u te helpen een meer deskundige C-programmeur te worden. Je krijgt inzicht in het ontwerp, de functies en structuren van algoritmen en begrijpt zowel multi-threading als multi-processing in een POSIX-omgeving.

Expert


Niet gecategoriseerd

  • Essentiële C(gratis pdf) – Nick Parlante (2003) . Merk op dat dit de C90-taal op verschillende punten beschrijft (bijv., bij het bespreken van //opmerkingen en plaatsing van variabele declaraties op willekeurige punten in de code), dus het moet worden behandeld met enige voorzichtigheid.

  • Veelgestelde vragen over C-programmering: veelgestelde vragen– Steve Summit (1995). Dit is het boek van de eerder genoemde website. Het dekt niet C99 of de latere standaarden.

  • C in een notendop– Peter Prinz en Tony Crawford (2005). Uitstekend boek als je een referentie voor C99 nodig hebt.

  • Functioneel C– Pieter Hartel en Henk Muller (1997 ). Leert moderne praktijken die van onschatbare waarde zijn voor programmeren op laag niveau, met gelijktijdigheid en modulariteit in gedachten.

  • De praktijk van programmeren– Brian W. Kernighan en Rob Snoek (1999). Een heel goed boek bij K&R. Het gebruikt ook C++ en Java.

  • C-vallen en valkuilendoor A. Koenig (1989) ). Heel goed, maar de C-stijl dateert van vóór de standaard C, waardoor het tegenwoordig minder aan te bevelen is.

    Sommigen hebben gepleit voor het verwijderen van ‘Traps and Pitfalls’ van deze lijst omdat het sommige mensen ertoe heeft verstrikt fouten te maken; anderen blijven pleiten voor de opname ervan. Misschien moet het worden beschouwd als een ‘expert’-boek omdat het een redelijk uitgebreide kennis van C vereist om te begrijpen wat er is veranderd sinds het werd gepubliceerd.

  • MISRA-C– industriestandaard gepubliceerd en onderhouden door de Motor Industry Software Reliability Association. Dekt C89 en C99.

    Hoewel dit geen boek als zodanig is, raden veel programmeurs aan om er zoveel mogelijk van te lezen en te implementeren. MISRA-C was oorspronkelijk bedoeld als richtlijn voor met name veiligheidskritieke applicaties, maar is van toepassing op elk toepassingsgebied waar stabiele, bugvrije C-code gewenst is (wie wil er niet minder bugs?). MISRA-C wordt de de facto standaard in de hele embedded industrie en wordt zelfs in andere programmeerbranches steeds populairder. Er zijn (minimaal) drie publicaties van de standaard (1998, 2004 en de huidige versie uit 2012). Er is ook een document met MISRA-nalevingsrichtlijnen uit 2016 en MISRA C:2012-amendement 1 — Aanvullende beveiligingsrichtlijnen voor MISRA C:2012 (gepubliceerd in april 2016).

    Houd er rekening mee dat sommige beperkingen in de MISRA-regels niet geschikt zijn voor elke context. In richtlijn 4.12 staat bijvoorbeeld: “Dynamische geheugentoewijzing mag niet worden gebruikt”. Dit is passend in de embedded systemen waarvoor de MISRA-regels zijn ontworpen; het past niet overal. (Compilers gebruiken bijvoorbeeld over het algemeen dynamische geheugentoewijzing voor zaken als symbooltabellen, en het zou moeilijk, zo niet belachelijk zijn om het zonder dynamische geheugentoewijzing te doen.)

  • Gearchiveerde lijsten van Accu-beoordeelde boeken op BEGINNERS C (116 titels) van 2007 en geavanceerde C (76 titels) vanaf 2008. De meeste van deze kijken niet op De hoofdsite meer, en je kunt toch niet bladeren door onderwerp.


WAARSCHUWINGEN

Er is een lijst met boeken en tutorials om voorzichtig te zijn met de ISO 9899 wiki , die zelf formeel geassocieerd is met ISO of de C-standaard, maar bevat informatie over de C-standaard (hoewel het de release van ISO 9899: 2011 genoemd is en niet vermeldt de release van ISO 9899: 2018).

Wees op hun hoede voor boeken geschreven door Herbert Schildt . In het bijzonder zou je weg moeten blijven van C: de volledige referentie (4e editie , 2000), in sommige cirkels bekend als C: de complete onzin.

Gebruik ook het boek Laten we C (16 th < / sup>EDITION, 2017) door Yashwant Kanetkar. Veel mensen zien het als een verouderd boek dat Turbo C leert en veel verouderd, misleidend en onjuist materiaal heeft. Page 137 bespreekt bijvoorbeeld de verwachte uitvoer van printf("%d %d %d\n", a, ++a, a++)en categoriseert het niet als undefined gedrag zoals het zou moeten. Het bevordert ook consequent eenduidelijke en buggy-coderingspraktijken, zoals het gebruik van gets, %[\n]sin scanf, opslaan van retourwaarde van getcharin een variabele van het type charof met fflushop stdin.

leer de harde manier (2015) door zed Shaw. Een boek met gemengde beoordelingen.
een kritiek van dit boek door Tim HENENAAR:

Om mijn mening samen te vatten, die hieronder zijn aangelegd, presenteert de auteur het materiaal in een sterk oversimplificeerde en misleidende manier, het hele Corpus is een gebundelde puinhoop en sommige van de meningen en analyses die hij biedt, zijn gewoon onjuist verkeerd. Ik heb geprobeerd dit boek door de ogen van een beginnende te bekijken, maar helaas ben ik bevooroordeeld door jaren van ervaringscode in C. Het is voor mij duidelijk dat de auteur een gebrekkig begrip heeft van C, of ​​hij is opzettelijk oversomming punt waar hij de lezer eigenlijk misleidt (opzettelijk of anderszins).

‘Learn C The Hard Way’ is geen boek dat ik zou kunnen aanbevelen aan iemand die zowel leert programmeren als C leert. Als je al een competente programmeur bent in een andere verwante taal, dan is het een interessant en ongebruikelijke uiteenzetting over C, hoewel ik bedenkingen heb bij delen van het boek. Jonathan Leffler


Verouderd


Andere bijdragers, die niet noodzakelijk in de revisiegeschiedenis zijn vermeld, zijn onder meer:
Alex Lockwood,
Ben Jackson,
Bubbels,
klauwen,
coledot,
Dana Robinson,
Daniel Holden,
desbest,
Dervin Thunk,
dwc,
Erci Hou,
Garen,
haziz,
Johan Bezem,
Jonathan Leffler,
Jozua 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

Other episodes